SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)
生活随笔
收集整理的這篇文章主要介紹了
SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊打開鏈接
數據結構實驗之鏈表六:有序鏈表的建立
Time Limit:?1000MS?Memory Limit:?65536KB Submit?Statistic?DiscussProblem Description
輸入N個無序的整數,建立一個有序鏈表,鏈表中的結點按照數值非降序排列,輸出該有序鏈表。Input
第一行輸入整數個數N;第二行輸入N個無序的整數。
Output
依次輸出有序鏈表的結點值。Example Input
6 33 6 22 9 44 5Example Output
5 6 9 22 33 44Hint
不得使用數組!Author
#include<stdio.h> #include<stdlib.h> struct vode {int date;struct vode *next; }; int main() {struct vode *head,*tail,*p,*q;head=(struct vode *)malloc(sizeof(struct vode ));head->next=NULL;tail=head;int n,i;scanf("%d",&n);for(i=1;i<=n;i++){p=(struct vode *)malloc(sizeof(struct vode ));p->next=NULL;scanf("%d",&p->date);tail->next=p;//尾插法tail=p;}int k=0;while(k=!k)//首先給k取反,k=1,然后while()語句在判斷其是否為1,等于1時才進行循環,不得不說這個這個排序算法太神奇了{p=head->next;q=p->next;while(q){if(p->date<q->date){int t;t=p->date;p->date=q->date;q->date=t;k=0;}//當while(q)時,不進入if判斷語句,自然就不能給k賦值為0,(之前的while(k=!k)把k賦值為1,)在下次進入while(k=!k)時自然k就不等于1了,結束循環,(k的精妙)else{p=p->next;q=q->next;}}}p=head->next;int s=0;while(p){if(s==0){printf("%d",p->date);s=1;}else printf(" %d",p->date);p=p->next;}return 0; }/*總結:這個對鏈表數據進行排序的算法思想是首先進入循環體,找到第一組p->date>q->date的數值,先對他們兩個進行排序 此時if語句執行完畢,在跳出進行while(q)的判斷,顯然上次進行if完成后p->date<q->date,所以這次的while(q)進入到else的語句 這時候就在開始進行找,直到找到另一組p->date>q->date的數據進行排序,直到q=NULL時結束內循環,跳出來,再從整個數據的第一組數在進行尋找(之前只要找到一組p->date>q->date 的數據,k就被重新賦值為0了,所以下次的while(k=!k)外循環肯定是成立的,當while(k=!k)不成成立時也就說明整個數據已經被排序完成。) */總結
以上是生活随笔為你收集整理的SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第3周实践项目4 -顺序表的应用 删除顺
- 下一篇: SDUT—2054数据结构实验之链表九: