資料結構—單鏈表—直接插入排序
阿新 • • 發佈:2019-01-08
有一個帶頭節點的單鏈表L(至少有一個數據節點),設計一個程式使其元素呈遞增有序排列 。
思路:
先構造一個只含有一個數據節點的有序表。然後掃描單鏈表L餘下的節點*p(直到p為NULL為止),在有序表中通過比較找插入*p節點的前驅節點*pre,然後在*pre節點之後插入*p節點。
執行結果:#include <iostream> using namespace std; #include <malloc.h> typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; } LinkList; void sort(LinkList *&L) { LinkList *p,*pre,*q; p=L->next->next; //p指向L的第2個數據節點 L->next->next=NULL; //構造只含有一個數據節點的有序表 while(p!=NULL) { q=p->next; //q儲存*p節點後繼節點的指標 pre=L; //從有序表開頭進行比較 while(pre->next!=NULL&&pre->next->data<p->data) //在有序表中查詢*p插入的前驅節點*pre pre=pre->next; p->next=pre->next; //將*p插入*pre之後 pre->next=p; p=q; //掃描原連結串列餘下的節點 } } int main() { LinkList *L=(LinkList *)malloc(sizeof(LinkList)),*p,*r; L->next=NULL; r=L; ElemType a[10]={3,8,2,7,1,5,3,4,6,0}; for(int i=0;i<10;i++) { p=(LinkList *)malloc(sizeof(LinkList)); p->data=a[i]; r->next=p; r=p; } r->next=NULL; cout<<"排序後為:"<<endl; sort(L); p=L->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; return 0; }