c語言雙鏈表排序交換節點 雙向鍊錶排序C語言程式

2021-10-13 09:35:00 字數 2131 閱讀 5486

// 雙向鍊錶排序.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 單鏈表操 作交換節點

鍊錶是最為常見,並且經常需要使用到的資料結構之一。對於單鏈表的基本操作,例如建立鍊錶 插入 刪除等都不是特別複雜,但是其實對於鍊錶的操作實際上很多的操作還是有一定的難度,例如上次給出的單鏈表的逆轉,以及這裡的單鏈表交換兩個節點。單鏈表的交換節點的含義是 給定乙個單鏈表,要求交換其中的任意兩個節點。注...