陳祎智
實驗報告<2> 1. 問題描述: 雙向鏈表的排序。
要求:
輸入一個雙向鏈表,顯示些雙向鏈表并對此雙向鏈表排序
2.課題分析(結構圖):
3.數據結構的設計: typedef struct node { int info;
struct node *llink,*rlink;
}NODE; 雙向鏈表的排序 雙向鏈表存儲結構 快速排序定義 輸入數據結點
4.流程圖
5.源程序:
#include<iostream.h> #include<stdlib.h> #include <stdio.h> 開始 創建鏈表 初始化鏈表 從中間分成兩部 排序鏈表 插入 10 個值 輸出排序鏈表 終止
typedef struct Link/*雙向鏈表結構體*/ {
int data;
struct Link *lift;
struct Link *right; }linkx,*linky; linky Init();/*建立雙向鏈表*/ void PrLink(linky p);/*輸出雙向鏈表*/ linky Sort(linky head);/*對雙向鏈表排序*/ linky S head,linky one,linky two);/*任意交換雙向鏈表兩個結點的地址*/ void main(void) {
linky head;
head=Init();
head=Sort(head);
PrLink(head); } linky (Init())/*建立鏈表*/ {
linky p,q,head;
int n=0;
head=p=q=(linky)malloc(sizeof(linkx));
printf("排序前的鏈表: ");
scanf("%d",&p->data);/*輸入數據*/
head->lift=NULL;
n++;
while(n!=10)/*一直輸入到規定的數字個數停止*/ {
q=p;
p=(linky)malloc(sizeof(linkx));
scanf("%d",&p->data);/*輸入數據*/
q->right=p;
p->lift=q;
n++; }
p->right=NULL;
return(head); } linky S head,linky one,linky two)/*任意交換兩個結點*/ {linky temp;
if(one->lift==NULL&&two->right==NULL)/*首和尾巴的交換*/
{
if(one->right==two)/*只有兩個結點的情況下*/
{
two->right=one;
two->lift=NULL;
one->lift=two;
one->right=NULL;
head=two;
}
else/*有間隔的首尾交換*/
{
one->right->lift=two;
two->lift->right=one;
two->right=one->right;
one->lift=two->lift;
two->lift=one->right=NULL;
head=two;/*尾結點成為頭結點*/
}
}
else if(two->right==NULL)/*尾和任意一個交換*/
{
if(one->right==two)/*交換最后兩個結點*/
{
one->lift->right=two;
two->lift=one->lift;
two->right=one;
one->lift=two;
one->right=NULL;
}
else/*和前面其他結點交換*/
{
temp=two->lift;
temp->right=one;
one->lift->right=two;
one->right->lift=two;
two->lift=one->lift;
two->right=one->right;
one->lift=temp;
one->right=NULL;
}
}
else if(one->lift==NULL)/*頭和任意一個交換*/
{
if(one->right==two)/*交換頭兩個結點*/
{
two->right->lift=one;
one->right=two->right;
one->lift=two;
two->right=one;
two->lift=NULL;
head=two;
}
else/*頭結點和后面其他結點交換*/
{
temp=one->right;
temp->lift=two;
one->lift=two->lift;
one->right=two->right;
two->lift->right=one;
two->right->lift=one;
two->right=temp;
two->lift=NULL;
head=two;/*交換的結點成為頭結點*/
}
}
else/*當中的任意兩個交換*/
{
if(one->right==two)/*交換連在一起的兩個結點*/
{
temp=one->lift;
one->lift->right=two;
one->right->lift=two;
one->lift=two;
one->right=two->right;
two->right->lift=one;
two->right=one;
two->lift=temp;
}
else/*交換隔開的兩個結點*/
{
one->lift->right=two;
one->right->lift=two;
one->lift=two->lift;
temp=one->right;
one->right=two->right;
two->lift->right=one;
two->right->lift=one;
two->right=temp;
two->lift=one->lift;
}
}
return(head); } linky Sort(linky head)/*對鏈表排序*/ {
linky i,j,t,p;
int max;
p=head;
for(i=p;i->right!=NULL;i=i->right)/*用選擇法的思想對這些結點排序*/
{
max=i->data;
for(j=i->right;j!=NULL;j=j->right)
if(j->data<max)
{
max=j->data;
t=j;
}
if(max!=i->data)/*假如沒有找到比 i 小的結點*/
{
head=S);/*因為最終返回的是頭結點,而頭結點又有可能變化,所以每次頭結點返回*/
i=t;
}
}
return(head); } void PrLink(linky p)/*輸出鏈表*/ {
linky q;
printf("排序后: ");
do
{
q=p;
printf("%d ",p->data);
p=p->right;
free(q);/*釋放輸出結點*/
}
while(p!=NULL);
}
6.調試記錄:
第一次輸入 136 134 158 123 197 124 156 170 103 101 實現排序
第二次調試 輸入 12367 15842 12564 13729 49875 1546 15423 15794 54612 1543
7.軟件說明
程序調試運行成功后,排序前隨機輸入十個不同的數值,快速排序后將由小到大輸出這十個數值的排序。如上圖說明
. 8. 設計總結
一周的上機實踐課程結束了,我們也按要求完成了實踐內容,這次上機實踐,使我鞏固了所學的計算機知識,對 C 語言知識有了更進一步的了解。但是知識是學無止境的,我相信,這次的課程設計對我以后在計算機編程這方面有很好的指導意義,讓我通過這次實踐了解到計算機編程的冰山一角。我此次設計的雙向鏈表的排序程序雖然比較典型,對我們認識數據結構和 C 程序設計卻有很好的幫助。
在設計中我遇到了很多編程方面的難點,在老師的辛勤指導和同學們的熱心幫助下,我慢慢的找到了解決問題的方法。在老師的指導下我學到很多實用的知識,在此表示感謝!感謝老師和同學們的幫助和支持。
推薦訪問: 雙向 排序 鏈表上一篇:鄉鎮衛生院調研報告例文x
下一篇:鄉鎮意識形態工作自查報告
在偉大祖國73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動,集中觀看了抗美援朝題材影片《長津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國剛剛成立一年,
根據省局黨組《關于舉辦習近平談治國理政(第四卷)讀書班的通知》要求,我中心通過專題學習、專題研討以及交流分享等形式,系統的對《習近平談治國理政》(第四卷)進行了深入的學習與交流,下面我就來談一談我個人
《習近平談治國理政》(第四卷)是在百年變局和世紀疫情相互疊加的大背景下,對以習近平同志為核心的黨中央治國理政重大戰略部署、重大理論創造、重大思想引領的系統呈現。它生動記錄了新一代黨中央領導集體統籌兩個
《真抓實干做好新發展階段“三農工作”》是《習近平談治國理政》第四卷中的文章,這是習近平總書記在2020年12月28日中央農村工作會議上的集體學習時的講話。文章指出,我常講,領導干部要胸懷黨和國家工作大
在《習近平談治國理政》第四卷中,習近平總書記強調,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執政黨,在中國共產黨的字典里,“人民”一詞從來都
黨的十八大以來,習近平總書記以馬克思主義戰略家的博大胸襟和深謀遠慮,在治國理政和推動全球治理中牢固樹立戰略意識,在不同場合多次圍繞戰略策略的重要性,戰略和策略的關系,提高戰略思維、堅定戰略自信、強化戰
《習近平談治國理政》第四卷集中展示了以習近平同志為核心的黨中央在百年變局和世紀疫情相互疊加背景下,如何更好地堅持和發展中國特色社會主義而進行的生動實踐與理論探索;對于新時代堅持和發展什么樣的中國特色社
在黨組織的關懷下,我有幸參加了區委組織部組織的入黨積極分子培訓班。為期一周的學習,學習形式多樣,課程內容豐富,各位專家的講解細致精彩,對于我加深對黨的創新理論的認識、對黨的歷史的深入了解、對中共黨員的
《習近平談治國理政》第四卷《共建網上美好精神家園》一文中指出:網絡玩命是新形勢下社會文明的重要內容,是建設網絡強國的重要領域。截至2021年12月,我國網民規模達10 32億,較2020年12月增長4
剛剛召開的中國共產黨第十九屆中央委員會第七次全體會議上討論并通過了黨的十九屆中央委員會向中國共產黨第二十次全國代表大會的報告、黨的十九屆中央紀律檢查委員會向中國共產黨第二十次全國代表大會的工作報告和《