亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Chapter_3表、棧和隊列:鏈表

2019-11-14 10:19:56
字體:
來源:轉載
供稿:網友

1、單鏈表

如下圖為單鏈表示意圖: 這里寫圖片描述 只列出頭文件以及單鏈表相關函數實現代碼,均來源于書上,并整理出分析過程。

_List_H.h// _List_H.h#ifndef _List_Hstruct Node;typedef struct Node * PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;List MakeEmpty(List L);int Isempty(List L);int IsLast(Position P,List L);Position Find(ElementType X,List L);Position FindPRevious(ElementType X,List L);void Delete(ElementType X,List L);void Insert(ElementType X,List L,Position P);void DeleteList(List L);Position Header(List L);Position First(List L);Position Advance(Position P);ElementType Retrieve(Position P);#endif /*_List_H*/List_Function.c// List_Function.c/*Place the implemention of the functions*/#include '_List_H.h'struct node{ ElementType Element; Position Next;};/*return true if L is empty*/int IsEmpty(List L){ return L->Next==NULL;}/*return true if P is the last position in list L*//*parameter L is unused in this implementation*/int IsLast(Position P,List L){ return P->Next==NULL;}/*return the podsition of X in L;Null if not found*/Position Find(ElementType X,List L){ Position P; P=L->Next; while(P!=NULL && P->Element!=X) P=P->Next; return P;}/*return the previous position of X;Null if not found X*/Position FindPrevious(ElementType X,List L){ Position P; P=L; /*Let P=L,for easier to check the next one*/ while(P->Next!=NULL && P->Next->Element!=X) P=P->Next; return P;}/*//Another version of FindPrevious(may some mistakes)Position FindPrevious(ElementType X,List L){ Position P_now,P_next; P_now=P->Next; //Difference:P_now!=L P_next=P_now->Next; if(P_now->Element==X) return P_now; else { while(P_now->Next!=NULL && P_next->Element!=X) { P_now=P_next; P_next=P_next->Next; } }}*//*Delete first occurrrence of X from a list*//*Assume use of a header node*/void Delete(ElementType X,List L){ Position P,TmpCell; /*TmpCell is used for free function*/ P=FindPrevious(X,L); if(!IsLast(P,L)) /*If IsLast(P,L) is true,then X must be NULL*/ { TmpCell=P->Next; P->Next=TmpCell->Next; free(TmpCell); } /*Attention:this is a 'void' function*/}/*Insert X after position P*/void Insert(ElementType X,List L,Position P){ Position TmpCell; TmpCell=malloc(sizeof(struct Node)); if(TmpCell==NULL) { printf("Out of space"); return -1; } TmpCell->Element=X; TmpCell->Next=P->Next; P->Next=TmpCell;}

重要經驗:當編寫涉及指針的數據結構或者算法時,最好先畫出結構圖分析過程,再進行寫代碼。(其實,除了涉及指針的要,很多數據結構、圖論等相關算法都先畫圖分析,清楚思路后才碼代碼較好)

以下為分析過程圖 這里寫圖片描述 這里寫圖片描述

2、雙鏈表

雙向鏈表如下圖所示: 這里寫圖片描述 即在單鏈表的每一個節點Node結構體上,加多一個struct Node * 的指針指向上一個結構體

優缺點

優點:簡化刪除操作,因為有現成的指向前一個指針可以更改指向即可缺點:增大空間需求(代碼量),插入開銷增加一倍,有雙向指針要搞

3、循環鏈表

如下圖所示,即在單(雙)鏈表末端不接NULL,使其返回指向表頭。 如下圖為雙向循環,同理也有單向循環。 這里寫圖片描述

4、幾個栗子

多項式ADT(數組實現)//定義多項式組成typedef struct { int CoeffArray[MaxDegree+1]; int HighPower;} * Polynominal;//多項式初始化為0的操作void ZeroPolynominal(Polynominal Poly){ int i; /*系數全部變為0*/ for(i=0;i<=MaxDegree;i++) { Poly->CoeffArray[i]=0; } /*最高階為0*/ Poly->HighPower=0;}//多項式相加操作void AddPolynominal(const Polynominal P1,const Polynominal P2,Polynominal Psum){ int i; ZeroPolynominal(Psum); Psum->HighPower=( P1->HighPower > P2->HighPower ?(P1->HighPower):(P2->HighPower) ); for(i=0;i<=Psum->HighPower;i++) Psum->CoeffArray[i]=P1->CoeffArray[i]+P2->CoeffArray[i];}//多項式乘法操作void MultPolynominal(const Polynominal P1,const Polynominal P2,Polynominal Pmult){ int i,j; ZeroPolynominal(Pmult); Psum->HighPower=P1->HighPower+P2->HighPower; if(Psum->HighPower > MaxDegree) /* 容易忽視的地方*/ { printf("Exceed size!"); return -1; } else { for(i=0;i<=P1->HighPower;i++) for(j=0;j<P2->HighPower;j++) Psum->CoeffArray[i+j]+=P1->CoeffArray[i] * P2->CoeffArray[j]; /* 多項式乘法:分分配律乘法 */ }}優點:簡單易行,假設所有階系數均不為0,對稠密型多項式(即1-N次階系數均不為0)

缺點:對于非稠密型多項式運算緩慢

2.多項式ADT(單鏈表實現)(暫時不會。。。) 只有一部分聲明。。

// 鏈表實現直接不要系數為0的項,且按階數遞減排序typedef struct Node * PtrToNode;struct Node{ int Coefficient; int Power; PtrToNode Next;};typedef PtrToNode Polynomial;

3.桶式排序&基數(卡式)排序

桶式排序思想:要求N個整數排序,且已知范圍為1-M。 步驟: Step1:設置一個空數組count[M],并初始化為0數組。 Step2:讀入N個數數列Ai,并有count[Ai]++。循環完N個數 Step3:對數組打印出順序。規則:從count[0]到count[M]遍歷,在數組第 i 個元素處輸出count[M]個數字 i基數排序思想: 對一組數先計算數字最高位數A。先按個位排序,之后接著按十位排序,直到按A位排序完。(當在某次排序中,兩個數的某一個位數一致時,按上一級原排序,如下面的十位排序時的125,27排序) 如:一組數:64,8,216,512,27,729,0,1,343,125。 按個位排序:0,1,512,343,64,125,216,27,8,729。 接著按十位排序:0,1,8,512,216,125,27,729,343,64。 接著按百位排序:0,1,8,27,64,125,216,343,512,729。

4.注冊表 eg:要知道一個學校的每個班的注冊人以及每個學生對應注冊的班級 可以利用如下多重表 這里寫圖片描述

5、游標

有些編程語言,如Basic等沒有指針,此時就不能基于指針來寫鏈表了。此時引入新的ADT”游標”來代替指針,且此時要重寫關于malloc與free的游標形式的函數。

注意鏈表有以下特性:

這里寫圖片描述 因此,游標鏈表也應該具有以上特點。

游標節點的實現 在游標節點實現中,引入數組實現,以下為游標節點的例子。 這里寫圖片描述// Cursor List// _Cursor_H.h#ifndef _Cursor_Htypedef int PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;void InitializeCursorSpace(void);List MakeEmpty(List L);int Isempty(List L);int IsLast(Position P,List L);Position Find(ElementType X,List L);Position FindPrevious(ElementType X,List L);void Delete(ElementType X,List L);void Insert(ElementType X,List L,Position P);void DeleteList(List L);Position Header(List L);Position First(List L);Position Advance(Position P);ElementType Retrieve(Position P);#endif /*_Cursor_H*//* implementation file */#include '_Curvor_H.h'struct Node{ ElementType Element; Position Next; /* data */};struct CurvorSpace[ SpaceSize ]; /*SpaceSize為自定空間*//*相當于指針鏈表中的malloc*/static Position CurvorAlloc(void){ Position P; P=CurvorSpace[0].Next; CurvorSpace[0].Next=CurvorSpace[P].Next; return P;}/*相當于指針函數 free*/static void CurvorFree(Position P){ CurvorSpace[P].Next=CurvorSpace[0].Next; CurvorSpace.Next=P;}/*剩下游標操作函數的實現和_List_Function.c里面的差不多List MakeEmpty(List L);int Isempty(List L);int IsLast(Position P,List L);Position Find(ElementType X,List L);Position FindPrevious(ElementType X,List L);void Delete(ElementType X,List L);void Insert(ElementType X,List L,Position P);void DeleteList(List L);Position Header(List L);Position First(List L);Position Advance(Position P);ElementType Retrieve(Position P);*/
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品影视在线观看| 亚洲精品日韩久久久| 国产又爽又黄的激情精品视频| 国产激情久久久久| 中文字幕日韩av电影| 亚洲黄页网在线观看| 国产极品精品在线观看| 91国产美女在线观看| 亚洲美女动态图120秒| 欧美亚洲国产另类| 精品福利在线观看| 亚洲精品日韩丝袜精品| 欧美大人香蕉在线| 亚洲成色777777女色窝| 国产啪精品视频| 欧美午夜影院在线视频| 日韩高清电影免费观看完整| 亚洲美女黄色片| 久久在线观看视频| 中文精品99久久国产香蕉| 一本大道香蕉久在线播放29| 国产精品三级久久久久久电影| 欧美极品第一页| 日韩免费在线观看视频| 亚洲精品资源在线| 国产欧美欧洲在线观看| 日韩一区二区三区国产| 久久躁日日躁aaaaxxxx| 日本午夜精品理论片a级appf发布| 久久免费少妇高潮久久精品99| 综合久久五月天| 国产成人亚洲综合91精品| 亚洲第一精品福利| 欧美一区二区视频97| 国产一区二区三区在线观看视频| 国产精品视频大全| 国产69精品久久久久久| 国产精品狠色婷| 北条麻妃一区二区三区中文字幕| 亚洲一区二区少妇| 国语自产精品视频在线看一大j8| 国产一区二区美女视频| 国产精品久久久久久久久久久新郎| 亚洲无限乱码一二三四麻| 国产午夜精品全部视频播放| 国产综合在线观看视频| 中文国产成人精品久久一| 欧美性猛交xxxx黑人猛交| 亚洲最大在线视频| 欧美性受xxxx白人性爽| 中文字幕精品在线视频| 成人午夜小视频| 国产成人jvid在线播放| 欧美在线激情网| 欧洲精品久久久| 日本午夜精品理论片a级appf发布| 欧美另类高清videos| 欧美在线观看一区二区三区| www国产亚洲精品久久网站| 97国产在线观看| 午夜精品久久17c| 国产精品自产拍在线观看中文| 亚洲精品永久免费| 97婷婷大伊香蕉精品视频| 成人444kkkk在线观看| 欧洲日本亚洲国产区| 精品亚洲国产成av人片传媒| 亚洲国产成人精品久久久国产成人一区| 国产一区二区三区丝袜| 国产欧美日韩中文字幕| 亚洲老司机av| 日本不卡免费高清视频| 性欧美长视频免费观看不卡| 久久精品99无色码中文字幕| 综合欧美国产视频二区| 久久精品夜夜夜夜夜久久| 亚洲xxxxx| 欧美有码在线视频| 亚洲九九九在线观看| 国产婷婷97碰碰久久人人蜜臀| 成人午夜在线观看| 久久91精品国产91久久久| 国产精品精品一区二区三区午夜版| 久久视频在线播放| 欧美激情精品久久久久久变态| 91av在线视频观看| 日韩av免费观影| 成人欧美一区二区三区在线| 中文字幕日韩电影| 国产午夜精品美女视频明星a级| 精品偷拍各种wc美女嘘嘘| 欧美午夜精品久久久久久人妖| 精品伊人久久97| 欧美区二区三区| 日韩av在线一区二区| 欧美中文在线观看国产| 亚洲欧美精品伊人久久| 欧美一区视频在线| 国产精品免费观看在线| 一本久久综合亚洲鲁鲁| 日韩动漫免费观看电视剧高清| 久久天天躁狠狠躁夜夜av| 日本精品久久久久影院| 久久97精品久久久久久久不卡| 国产一区二区三区久久精品| 欧美精品激情blacked18| 欧美日韩中文在线观看| 日韩电影免费观看中文字幕| 亚洲欧洲视频在线| 久久男人的天堂| 中文字幕av一区| 欧美成人剧情片在线观看| 超薄丝袜一区二区| 欧美与欧洲交xxxx免费观看| 日韩美女av在线免费观看| 国产成人亚洲综合91| 亚洲综合在线播放| 亚洲国产精品免费| 川上优av一区二区线观看| 国产成人精品视频在线观看| 精品日韩美女的视频高清| 日韩免费观看视频| 久久久成人的性感天堂| 在线视频免费一区二区| 国产午夜精品久久久| 久久九九精品99国产精品| 久久影视三级福利片| 中文字幕久热精品在线视频| 亚洲夜晚福利在线观看| 一二美女精品欧洲| 日韩成人中文字幕在线观看| 精品无人国产偷自产在线| 欧美天天综合色影久久精品| 日韩视频第一页| 亚洲精品成人久久电影| 久久天天躁狠狠躁夜夜av| 97国产精品视频人人做人人爱| 中文字幕亚洲一区| 91产国在线观看动作片喷水| 欧美高清视频在线观看| 亚洲欧洲一区二区三区在线观看| 亚洲激情免费观看| 久久影视三级福利片| 欧美最顶级丰满的aⅴ艳星| 日韩在线视频国产| 亚洲福利在线视频| 国产激情久久久久| 青草青草久热精品视频在线观看| 久久伊人91精品综合网站| 91成人天堂久久成人| 神马久久桃色视频| 国产精品高清在线观看| 亚洲欧美制服中文字幕| 国产第一区电影| 久久久久久久久网站| 欧美成人在线网站| 永久免费毛片在线播放不卡| 88国产精品欧美一区二区三区| 免费成人高清视频| 91亚洲国产成人久久精品网站| 久久久人成影片一区二区三区| 7777精品久久久久久| 亚洲成人黄色在线| 成人精品福利视频|