數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)1-4(C語言)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)1-4(C語言)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)1-4(C語言)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)1-4(C語言)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)1-4(C語言)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一 順序表的操作1、實(shí)驗(yàn)?zāi)康暮鸵螅?)了解順序表的基本概念、順序表結(jié)構(gòu)的定義及在順序表上的基本操作(插入、刪除、查找以及線性表合并)。2) 通過在visual C+實(shí)現(xiàn)以上操作的C語言代碼。3)提前了解實(shí)驗(yàn)相關(guān)的知識(shí)(尤其是C語言)。2、實(shí)驗(yàn)內(nèi)容:1) 順序表的插入算法,刪除算法,順序表的合并算法2) 順序表應(yīng)用的實(shí)例(二選一)a) 利用順序表的基本運(yùn)行,實(shí)現(xiàn)如果在順序表A中出現(xiàn)的元素,在順序表B中也出現(xiàn),則在順序表A中將該元素刪除。及實(shí)現(xiàn)A-B。b) 順序表A和B的元素都是非遞減排列,將他們合并成一個(gè)順序表C,要求C也是非遞減排列。3、部分參考實(shí)驗(yàn)代碼: 順序表結(jié)構(gòu)的定義:#inclu

2、de #define ListSize 100typedef int DataType;typedef structDataType listListSize;int length;SeqList; 順序表插入(在第i號(hào)元素前插入一個(gè)新的元素)int InsertList(SeqList *L,int i,DataType e) /*在順序表的第i個(gè)位置插入元素e,插入成功返回1,如果插入位置不合法返回-1,順序表滿返回0*/ int j;if(iL-length+1)/*在插入元素前,判斷插入位置是否合法*/ printf(插入位置i不合法!n); return -1;else if(L-l

3、ength=ListSize)/*在插入元素前,判斷順序表是否已經(jīng)滿,不能插入元素*/printf(順序表已滿,不能插入元素。n);return 0;elsefor(j=L-length;j=i;j-)/*將第i個(gè)位置以后的元素依次后移*/L-listj=L-listj-1; L-listi-1=e;/*插入元素到第i個(gè)位置*/ L-length=L-length+1;/*將順序表長(zhǎng)增1*/return 1; 順序表刪除 int DeleteList(SeqList *L,int i,DataType *e) int j; if(L-length=0) printf(順序表已空不能進(jìn)行刪除!n

4、); return 0; else if(iL-length) printf(刪除位置不合適!n); return -1; else *e=L-listi-1; for(j=i;jlength-1;j+) L-listj-1=L-listj; L-length=L-length-1; return 1; 實(shí)驗(yàn)二 單鏈表的操作1、實(shí)驗(yàn)?zāi)康?1)掌握用Visual C+6.0上機(jī)調(diào)試單鏈表的基本方法2)理解鏈表的基本操作、了解鏈表的建立和輸出3)掌握鏈表的插入、刪除、合并和歸并等實(shí)現(xiàn)方法2、實(shí)現(xiàn)內(nèi)容 1、單鏈表基本操作的實(shí)現(xiàn)2、鏈表應(yīng)用的實(shí)例(二選一)a) 利用鏈表的基本運(yùn)行,實(shí)現(xiàn)如果在鏈表A中出

5、現(xiàn)的元素,在鏈表B中也出現(xiàn),則在鏈表A中將該元素刪除。b)、約瑟夫(Josephus)問題的求解(循環(huán)鏈表的使用,使用C和C+語言均可)。假設(shè)有編號(hào)為1,2,n的n個(gè)人圍坐成一圈,約定從編號(hào)為k(n=k=1)的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列,他的下一個(gè)人從1開始重新報(bào)數(shù),數(shù)到m的那個(gè)人出列,依次類推,直到所有的人全部出列為止,由此產(chǎn)生一個(gè)出隊(duì)編號(hào)的序列。1、給定一個(gè)8個(gè)人的圈(n=8),約定從第3個(gè)人開始報(bào)數(shù)(k3),數(shù)到第4個(gè)人時(shí)的那個(gè)人出列(m4),使用循環(huán)鏈表,產(chǎn)生一個(gè)出隊(duì)編號(hào)的序列。2、參考的出隊(duì)序列為:。3、部分參考實(shí)驗(yàn)代碼:1、結(jié)點(diǎn)定義typedef int DataType;ty

6、pedef struct Node DataType data; struct Node *next;ListNode,*LinkList;2、單鏈表初始化void InitList(LinkList *head)/*將單鏈表初始化為空。動(dòng)態(tài)生成一個(gè)頭結(jié)點(diǎn),并將頭結(jié)點(diǎn)的指針域置為空。*/if(*head=(LinkList)malloc(sizeof(ListNode)=NULL) /*為頭結(jié)點(diǎn)分配一個(gè)存儲(chǔ)空間*/exit(-1);(*head)-next=NULL;/*將單鏈表的頭結(jié)點(diǎn)指針域置為空*/ListNode *Get(LinkList head,int i) /*查找單鏈表中第i個(gè)

7、結(jié)點(diǎn)。查找成功返回該結(jié)點(diǎn)的指針表示成功;否則返回NULL表示失敗。*/ListNode *p;int j;if(ListEmpty(head)/*在查找第i個(gè)元素之前,判斷鏈表是否為空*/return NULL;if(inext!=NULL&jnext;j+;if(j=i)return p;/*找到第i個(gè)結(jié)點(diǎn),返回指針p*/elsereturn NULL;/*如果沒有找到第i個(gè)元素,返回NULL*/ListNode *LocateElem(LinkList head,DataType e) /*查找線性表中元素值為e的元素,查找成功將對(duì)應(yīng)元素的結(jié)點(diǎn)指針返回,否則返回NULL表示失敗。*/Lis

8、tNode *p;p=head-next;/*指針p指向第一個(gè)結(jié)點(diǎn)*/while(p)if(p-data!=e)/*找到與e相等的元素,返回該序號(hào)*/p=p-next;elsebreak;return p;int LocatePos(LinkList head,DataType e) /*查找線性表中元素值為e的元素,查找成功將對(duì)應(yīng)元素的序號(hào)返回,否則返回0表示失敗。*/ListNode *p;int i;if(ListEmpty(head)/*在查找第i個(gè)元素之前,判斷鏈表是否為空*/return 0;p=head-next;/*指針p指向第一個(gè)結(jié)點(diǎn)*/i=1;while(p)if(p-da

9、ta=e)/*找到與e相等的元素,返回該序號(hào)*/return i;elsep=p-next;i+;if(!p)/*如果沒有找到與e相等的元素,返回0,表示失敗*/return 0;int InsertList(LinkList head,int i,DataType e)/*在單鏈表中第i個(gè)位置插入一個(gè)結(jié)點(diǎn),結(jié)點(diǎn)的元素值為e。插入成功返回1,失敗返回0*/自己完成int DeleteList(LinkList head,int i,DataType *e)/*刪除單鏈表中的第i個(gè)位置的結(jié)點(diǎn)。刪除成功返回1,失敗返回0*/ListNode *pre,*p;int j; pre=head; j=0

10、; while(pre-next!=NULL&pre-next-next!=NULL&jnext; j+; if(j!=i-1)/*如果沒找到要?jiǎng)h除的結(jié)點(diǎn)位置,說明刪除位置錯(cuò)誤*/ printf(刪除位置錯(cuò)誤); return 0;/*指針p指向單鏈表中的第i個(gè)結(jié)點(diǎn),并將該結(jié)點(diǎn)的數(shù)據(jù)域值賦值給e*/ p=pre-next;*e=p-data;/*將前驅(qū)結(jié)點(diǎn)的指針域指向要?jiǎng)h除結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),也就是將p指向的結(jié)點(diǎn)與單鏈表斷開*/ pre-next=p-next; free(p);/*釋放p指向的結(jié)點(diǎn)*/ return 1;實(shí)驗(yàn)三 雙鏈表的操作1、目的理解雙鏈表的基本操作了解雙鏈表的建立和輸出掌握

11、雙鏈表的插入、刪除等實(shí)現(xiàn)方法2、內(nèi)容和要求基本要求編寫一個(gè)程序,實(shí)現(xiàn)雙鏈表的各種基本運(yùn)算(假設(shè)雙鏈表的元素類型為char),并在此基礎(chǔ)上設(shè)計(jì)一個(gè)程序,完成如下功能:(1)初始化雙鏈表h;(2)采用尾插法依次插入元素a,b,c,d,e;(3)輸出雙鏈表h;(4)輸出雙鏈表h長(zhǎng)度;(5)判斷雙鏈表h是否為空;(6)輸出雙鏈表h的第3個(gè)元素;(7)輸出元素a的位置;(8)在第4個(gè)位置上插入元素f;(9)輸出雙鏈表h;(10)刪除h的第3個(gè)元素;(11)輸出雙鏈表h;(12)釋放雙鏈表h。#include stdio.h#include malloc.htypedef char ElemType;ty

12、pedef struct DNode /定義雙鏈表結(jié)點(diǎn)類型ElemType data;struct DNode *prior;/指向前驅(qū)結(jié)點(diǎn)struct DNode *next;/指向后繼結(jié)點(diǎn) DLinkList; void InitList(DLinkList *&L) L=(DLinkList *)malloc(sizeof(DLinkList); L-prior=L-next=NULL; void DestroyList(DLinkList *&L) DLinkList *p=L, *q=p-next; while(q!=NULL) free(p); p=q; q=q-next; fre

13、e(p); int ListEmpty(DLinkList *L) return(L-next=NULL); int ListLength(DLinkList *L) DLinkList *p=L; int i=0;while(p-next!=NULL)i+;p=p-next; return(i); void DispList(DLinkList *L) DLinkList *p=L-next; while(p!=NULL) printf(%c,p-data); p=p-next; printf(n); int GetElem(DLinkList *L,int i,ElemType &e) i

14、nt j=0; DLinkList *p=L; while(jnext; if(p=NULL)return 0;else e=p-data;return 1; int LocateElem(DLinkList *L,ElemType e) int i=1; DLinkList *p=L-next; while(p!=NULL&p-data!=e) p=p-next; i+; if(p=NULL) return(0); else return(i); int ListInsert(DLinkList *&L,int i,ElemType e) int ListDelete(DLinkList *

15、&L,int i,ElemType &e) . void main()DLinkList *h;ElemType e;printf(雙鏈表的基本運(yùn)算如下:n);printf( (1)初始化雙鏈表hn);InitList(h);printf( (2)依次采用尾插法插入a,b,c,d,e元素n);ListInsert(h,1,a);ListInsert(h,2,b);ListInsert(h,3,c);ListInsert(h,4,d);ListInsert(h,5,e);printf( (3)輸出雙鏈表h:);DispList(h);printf( (4)雙鏈表h長(zhǎng)度=%dn,ListLengt

16、h(h);printf( (5)雙鏈表h為%sn,(ListEmpty(h)?空:非空);GetElem(h,3,e);printf( (6)雙鏈表h的第3個(gè)元素=%cn,e);printf( (7)元素a的位置=%dn,LocateElem(h,a);printf( (8)在第4個(gè)元素位置上插入f元素n);ListInsert(h,4,f);printf( (9)輸出雙鏈表h:);DispList(h);printf( (10)刪除h的第3個(gè)元素n);ListDelete(h,3,e);printf( (11)輸出雙鏈表h:);DispList(h);printf( (12)釋放雙鏈表hn)

17、;DestroyList(h); 實(shí)驗(yàn)4:棧的定義及基本操作一、實(shí)驗(yàn)?zāi)康模? 熟練掌握棧和隊(duì)列的特點(diǎn). 掌握棧的定義和基本操作,熟練掌握順序棧的操作及應(yīng)用. 掌握對(duì)列的定義和基本操作,熟練掌握鏈?zhǔn)疥?duì)列的操作及應(yīng)用 加深對(duì)棧結(jié)構(gòu)的理解,逐步培養(yǎng)解決實(shí)際問題的編程能力二、實(shí)驗(yàn)內(nèi)容:定義順序棧,完成棧的基本操作:空棧、入棧、出棧、取棧頂元素;實(shí)現(xiàn)十進(jìn)制數(shù)與八進(jìn)制數(shù)的轉(zhuǎn)換,十進(jìn)制數(shù)與十六進(jìn)制數(shù)的轉(zhuǎn)換和任意進(jìn)制之間的轉(zhuǎn)換;定義鏈?zhǔn)疥?duì)列,完成隊(duì)列的基本操作:入隊(duì)和出隊(duì);1問題描述:利用棧的順序存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)一組輸入數(shù)據(jù)(假定為一組整數(shù)),能夠?qū)樞驐_M(jìn)行如下操作:. 初始化一個(gè)空棧,分配一段連續(xù)的存儲(chǔ)空間

18、,且設(shè)定好棧頂和棧底;. 完成一個(gè)元素的入棧操作,修改棧頂指針;. 完成一個(gè)元素的出棧操作,修改棧頂指針;. 讀取棧頂指針?biāo)赶虻脑氐闹担? 將十進(jìn)制數(shù) N 和其它 d 進(jìn)制數(shù)的轉(zhuǎn)換是計(jì)算機(jī)實(shí)現(xiàn)計(jì)算的基本問題,其解決方案很多,其中最簡(jiǎn)單方法基于下列原理:即除 d取余法。例如:(1348)10=(2504)8N N div 8 N mod 81348 168 4168 21 0 21 2 52 0 2從中我們可以看出, 最先產(chǎn)生的余數(shù) 4 是轉(zhuǎn)換結(jié)果的最低位, 這正好符合棧的特性即后進(jìn)先出的特性。所以可以用順序棧來模擬這個(gè)過程。以此來實(shí)現(xiàn)十進(jìn)制數(shù)與八進(jìn)制數(shù)的轉(zhuǎn)換,十進(jìn)制數(shù)與十六進(jìn)制數(shù)的轉(zhuǎn)換;.

19、 編寫主程序,實(shí)現(xiàn)對(duì)各不同的算法調(diào)用。2實(shí)現(xiàn)要求:對(duì)順序棧的各項(xiàng)操作一定要編寫成為 C(C+)語言函數(shù),組合成模塊化的形式,每個(gè)算法的實(shí)現(xiàn)要從時(shí)間復(fù)雜度和空間復(fù)雜度上進(jìn)行評(píng)價(jià)。.“初始化棧算法”操作結(jié)果:構(gòu)造一個(gè)空棧 S;.“銷毀棧算法”操作結(jié)果:銷毀棧 S,S不再存在;.“置空棧算法” 操作結(jié)果:把 S 置為空棧;.“判是否空棧算法” 操作結(jié)果:若棧 S為空棧,則返回 TRUE,否則返回 FALSE;.“求棧的長(zhǎng)度算法” 操作結(jié)果:返回 S的元素個(gè)數(shù),即棧的長(zhǎng)度;.“取棧頂元素算法” 操作結(jié)果:若棧不空,則用e 返回S 的棧頂元素,并返回 OK;否則返回 ERROR;.“入棧算法”操作結(jié)果:

20、插入元素 e為新的棧頂元素.“出棧算法”操作結(jié)果:若棧不空,則刪除 S的棧頂元素,用 e 返回其值,并返回 OK;否則返回 ERROR.“實(shí)現(xiàn)十進(jìn)制數(shù)與八進(jìn)制數(shù)的轉(zhuǎn)換算法”操作結(jié)果:輸入任意一個(gè)非負(fù)的十進(jìn)制數(shù),輸出對(duì)應(yīng)的八進(jìn)制數(shù);.“實(shí)現(xiàn)十進(jìn)制數(shù)與十六進(jìn)制數(shù)的轉(zhuǎn)換算法”操作結(jié)果:輸入任意一個(gè)非負(fù)的十進(jìn)制數(shù),輸出對(duì)應(yīng)的十六進(jìn)制數(shù);三、實(shí)驗(yàn)指導(dǎo)(一)順序棧的實(shí)驗(yàn)指導(dǎo)1首先將順序棧存儲(chǔ)結(jié)構(gòu)定義放在一個(gè)頭文件:如取名為 SqStackDef.h。2將順序棧的基本操作算法也集中放在一個(gè)文件之中,如取名為 SqStackAlgo.h。如:InitStack、DestroyStack、 ClearStack

21、、 StackEmpty、 StackLength、 GetTop、 Push、 Pop、 conversion10_8、 conversion10_16等。3將函數(shù)的測(cè)試和主函數(shù)組合成一個(gè)文件,如取名為 SqStackUse.cpp。四、參考程序一)編寫一個(gè)程序,實(shí)現(xiàn)順序棧(假設(shè)棧中元素類型為char)的各種基本運(yùn)算,并在此基礎(chǔ)上設(shè)計(jì)一個(gè)程序完成如下功能:(1)初始化棧s;(2)判斷棧s是否非空;(3)依次進(jìn)棧元素a,b,c,d,e;(4)判斷棧s是否非空;(5)輸出棧長(zhǎng)度;(6)輸出從棧頂?shù)綏5自?;?)輸出出棧序列;(8)判斷棧s是否非空;(9)釋放棧。程序代碼如下:#include

22、#include #define MaxSize 100typedef char ElemType;typedef struct ElemType dataMaxSize;int top;/棧頂指針 SqStack;void InitStack(SqStack *&s)s=(SqStack *)malloc(sizeof(SqStack);s-top=-1;/棧頂指針置為-1void DestroyStack(SqStack *&s)free(s);int StackLength(SqStack *s)return(s-top+1);bool StackEmpty(SqStack *s)ret

23、urn(s-top=-1);bool Push(SqStack *&s,ElemType e)if (s-top=MaxSize-1)/棧滿的情況,即棧上溢出return false;s-top+;/棧頂指針增1s-datas-top=e;/元素e放在棧頂指針處return true;bool Pop(SqStack *&s,ElemType &e)if (s-top=-1)/棧為空的情況,即棧下溢出return false;e=s-datas-top;/取棧頂指針元素的元素s-top-;/棧頂指針減1return true; bool GetTop(SqStack *s,ElemType &

24、e)if (s-top=-1)/棧為空的情況,即棧下溢出return false;e=s-datas-top;/取棧頂指針元素的元素return true;void DispStack(SqStack *s) int i; for (i=s-top;i=0;i-) printf(%c ,s-datai); printf(n); void main()ElemType e;SqStack *s;printf(棧s的基本運(yùn)算如下:n);printf( (1)初始化棧sn);InitStack(s);printf( (2)棧為%sn,(StackEmpty(s)?空:非空);printf( (3)依

25、次進(jìn)棧元素a,b,c,d,en);Push(s,a);Push(s,b);Push(s,c);Push(s,d);Push(s,e);printf( (4)棧為%sn,(StackEmpty(s)?空:非空);printf( (5)輸出棧長(zhǎng)度:%dn,StackLength(s);printf( (6)輸出從棧頂?shù)綏5自?); printf(n); printf( (7)出棧序列:); while (!StackEmpty(s)Pop(s,e);printf(%c ,e);printf(n);printf( (8)棧為%sn,(StackEmpty(s)?空:非空);printf( (9)釋

26、放棧n);DestroyStack(s);二)編寫一個(gè)程序,實(shí)現(xiàn)鏈棧(假設(shè)棧中元素類型為char)的各種基本運(yùn)算,并在此基礎(chǔ)上設(shè)計(jì)一個(gè)程序,完成如下功能:(1)初始化鏈棧s;(2)判斷鏈棧s是否非空;(3)依次進(jìn)鏈棧元素a,b,c,d,e;(4)判斷鏈棧s是否非空;(5)輸出鏈棧長(zhǎng)度;(6)輸出從鏈棧頂?shù)綏5自兀唬?)輸出出鏈棧序列;(8)判斷鏈棧s是否非空;(9)釋放鏈棧。程序代碼如下:#include #include typedef char ElemType;typedef struct linknodeElemType data;/數(shù)據(jù)域struct linknode *next;

27、/指針域 LiStack;void InitStack(LiStack *&s)/初始化棧ss=(LiStack *)malloc(sizeof(LiStack);s-next=NULL;void DestroyStack(LiStack *&s)/銷毀棧LiStack *p=s,*q=s-next;while (q!=NULL)free(p);p=q;q=p-next;free(p);/此時(shí)p指向尾節(jié)點(diǎn),釋放其空間bool StackEmpty(LiStack *s)/判斷棧是否為空return(s-next=NULL);void Push(LiStack *&s,ElemType e)/進(jìn)

28、棧LiStack *p;p=(LiStack *)malloc(sizeof(LiStack);p-data=e;/新建元素e對(duì)應(yīng)的節(jié)點(diǎn)*pp-next=s-next;/插入*p節(jié)點(diǎn)作為開始節(jié)點(diǎn)s-next=p;bool Pop(LiStack *&s,ElemType &e)/出棧LiStack *p;if (s-next=NULL)/??盏那闆rreturn false; p=s-next;e=p-data; s-next=p-next; free(p);return true;bool GetTop(LiStack *s,ElemType &e)/取棧頂元素if (s-next=NULL)

29、/??盏那闆rreturn false;e=s-next-data;return true;int StackLength(LiStack *&s) int i=0; LiStack *p=s; while(p-next!=NULL) i+; p=p-next; return i;void DispStack(LiStack *s)LiStack *p=s-next;while(p!=NULL)printf(%c,p-data);p=p-next;printf(n);void main()ElemType e;LiStack *s;printf(棧s的基本運(yùn)算如下:n);printf( (1)初

30、始化棧sn);InitStack(s);printf( (2)棧為%sn,(StackEmpty(s)?空:非空);printf( (3)依次進(jìn)棧元素a,b,c,d,en);Push(s,a);Push(s,b);Push(s,c);Push(s,d);Push(s,e);printf( (4)棧為%sn,(StackEmpty(s)?空:非空); printf( (5)棧的長(zhǎng)度為:%dn,StackLength(s);printf( (6)從鏈棧頂?shù)綏5自?); DispStack(s); printf( (7)出棧序列:);while (!StackEmpty(s)Pop(s,e);pr

31、intf(%c ,e);printf(n);printf( (8)棧為%sn,(StackEmpty(s)?空:非空);printf( (9)釋放棧n);DestroyStack(s);三)利用堆棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換1文件 SqStackDef.h中實(shí)現(xiàn)了棧的順序存儲(chǔ)表示#define STACK_INIT_SIZE 10 /* 存儲(chǔ)空間初始分配量 */#define STACKINCREMENT 2 /* 存儲(chǔ)空間分配增量 */#define OK 1typedef int Status ;typedef struct SqStackSElemType *base; /* 在棧構(gòu)造之前和銷毀之后,

32、base 的值為NULL */SElemType *top; /* 棧頂指針 */int stacksize; /* 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位 */SqStack; /* 順序棧 */2文件 SqStackAlgo.h中實(shí)現(xiàn)順序棧的基本操作(存儲(chǔ)結(jié)構(gòu)由 SqStackDef.h定義)#include “SqStackDef.h” #includeStatus InitStack(SqStack &S) /* 構(gòu)造一個(gè)空棧 S */S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(O

33、VERFLOW); /* 存儲(chǔ)分配失敗 */S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status DestroyStack(SqStack &S) /* 銷毀棧 S,S不再存在 */free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;return OKStatus ClearStack(SqStack &S) /* 把 S 置為空棧 */S.top=S.base;return OK;Status StackEmpty(SqStack S) /* 若棧 S為空棧,則返回 TRUE,否則返

34、回 FALSE */if(S.top=S.base)return TRUE;elsereturn FALSE;int StackLength(SqStack S) /* 返回 S的元素個(gè)數(shù),即棧的長(zhǎng)度 */return S.top-S.base;Status GetTop(SqStack S,SElemType &e) /* 若棧不空,則用 e返回 S的棧頂元素,并返回OK;否則返回ERROR */if(S.topS.base)e=*(S.top-1);return OK;elsereturn ERROR;Status Push(SqStack &S,SElemType e) /* 插入元素

35、e為新的棧頂元素 */if(S.top-S.base=S.stacksize) /* 棧滿,追加存儲(chǔ)空間 */S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(OVERFLOW); /* 存儲(chǔ)分配失敗 */S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*(S.top)+=e;return OK;Status Pop(SqStack &S,SElemType &e) /* 若棧不空,則刪除 S的棧頂元素,用 e返回其值,并返回 OK;否則返回 ERROR */if(S.top=S.base)return ERROR;e=*-S.top;return OK;Status StackTraverse(SqStack S,Status(*visit)(SElemTyp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論