// 雙向鍊錶排序.cpp : 定義控制台應用程式的入口點。
#include
#include
#include
#define len sizeof(struct node)
struct node
int data;
struct node *next;
struct node *last;
struct list
struct node *head,*tail;
int l;
void main()
struct list a;
printf("請輸入a鍊錶的元素個數\n");
scanf("%d",&a.l);
int i,x=1;
struct node *p1,*p2,*p3;
printf("請輸入a鍊錶的第1個資料\n");
p1=p2=(struct node*)malloc(len);
scanf("%d",&p1->data);
a.head=p1;
p1->last=null;
for(i=2;i<=a.l;i++)
p2=(struct node*)malloc(len);
p1->next=p2;
p2->last=p1;
p1=p2;
printf("請輸入a鍊錶的第%d個資料\n",i);
scanf("%d",&p1->data);
p1->next=null;
a.tail=p1;//鍊錶a生成完畢//
for(p2=a.tail;p2->last->last;p2=p2->last)//考慮第乙個鏈點進行交換的情況//
if(p2->datalast->data)
p3=p2->last;
if(p2->next)
p3->last->next=p2;
p2->last=p3->last;
p2->next->last=p3;
p3->next=p2->next;
p3->last=p2;
p2->next=p3;
p2=p3;
else
p3->next=null;
p2->last=p3->last;
p3->last->next=p2;
p2->next=p3;
p3->last=p2;
p2=p3;
a.tail=p2;//考慮最後兩個鏈點交換的情況//
if(p2->last->data>p2->data)
p3=p2->last;
p2->last=null;
p3->next=p2->next;
p2->next->last=p3;
p3->last=p2;
p2->next=p3;
p2=p3;
a.head=p2->last;
p1=a.head;
while(p1->next)
for(p2=a.tail;p2->last!=p1;p2=p2->last)
if(p2->datalast->data)
p3=p2->last;
if(p2->next)
p3->last->next=p2;
p2->last=p3->last;
p2->next->last=p3;
p3->next=p2->next;
p3->last=p2;
p2->next=p3;
p2=p3;
else
p3->next=null;
p2->last=p3->last;
p3->last->next=p2;
p2->next=p3;
p3->last=p2;
p2=p3;
a.tail=p2;//考慮最後兩個鏈點交換的情況//
p1=p1->next;
p1=a.head;
printf("%d\t",p1->data);
dop1=p1->next;
printf("%d\t",p1->data);
while(p1->next);//新鍊錶輸出//
c語言雙鏈表排序交換節點 C語言學習 交換法排序
計算機領域,排序和查詢是兩種最基本的操作任務,幾乎在所有資料庫程式 程式設計程式和作業系統中都有應用。排序是把一系列資料按公升序或降序排列的過程,也就是將乙個無序大的資料序列調整為有序序列的過程,它往往占用很多cpu的執行時間。至今已經產生了許多比較成熟的排序演算法,如交換法 選擇法 插入排序法 冒...
雙向鍊錶的插入排序(交換節點)
插入排序需要從後往前遍歷尋找可以插入的位置,所以會使用到雙向鍊錶 typedef struct node 定義的結構體 list 建立帶頭節點的雙鏈表 list create list printf 請輸入資料 輸入 1結束 for int i 0 i if head i 0 else if q r...
C 單鏈表操 作交換節點
鍊錶是最為常見,並且經常需要使用到的資料結構之一。對於單鏈表的基本操作,例如建立鍊錶 插入 刪除等都不是特別複雜,但是其實對於鍊錶的操作實際上很多的操作還是有一定的難度,例如上次給出的單鏈表的逆轉,以及這裡的單鏈表交換兩個節點。單鏈表的交換節點的含義是 給定乙個單鏈表,要求交換其中的任意兩個節點。注...