數(shù)據(jù)結(jié)構(gòu)完整題目及答案1_第1頁
數(shù)據(jù)結(jié)構(gòu)完整題目及答案1_第2頁
數(shù)據(jù)結(jié)構(gòu)完整題目及答案1_第3頁
數(shù)據(jù)結(jié)構(gòu)完整題目及答案1_第4頁
數(shù)據(jù)結(jié)構(gòu)完整題目及答案1_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)報告目 錄實(shí)驗(yàn)一 學(xué)生成績分析程序.41.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析): .41.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .41.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.41.4 運(yùn)行輸出結(jié)果:.41.5 源程序及注釋: .5實(shí)驗(yàn)二 線性表的基本操作.82.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.82.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .82.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.82.4 運(yùn)行輸出結(jié)果:.82.5 源程序及注釋: .8實(shí)驗(yàn)三 鏈表的基本操作.11 3.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.113.2 程序設(shè)計(jì)的基本思

2、想,原理和算法描述: .113.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.113.4 運(yùn)行輸出結(jié)果:.113.5 源程序及注釋: .11實(shí)驗(yàn)四 單鏈表綜合實(shí)驗(yàn) .14 4.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.144.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .144.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.144.4 運(yùn)行輸出結(jié)果:.144.5 源程序及注釋: .14實(shí)驗(yàn)五 串.195.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.195.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .195.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.195.4 運(yùn)行輸出結(jié)果:.195.5

3、 源程序及注釋: .21實(shí)驗(yàn)六 循環(huán)隊(duì)列的實(shí)現(xiàn)與運(yùn)算.226.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.226.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .226.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.22 6.4 運(yùn)行輸出結(jié)果:.226.5 源程序及注釋: .23實(shí)驗(yàn)七 棧子系統(tǒng).267.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.267.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .267.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.26 7.4 運(yùn)行輸出結(jié)果:.267.5 源程序及注釋: .28實(shí)驗(yàn)八 樹.368.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.368.2 程序設(shè)計(jì)的基

4、本思想,原理和算法描述: .398.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.39 8.4 運(yùn)行輸出結(jié)果:.39 8.5 源程序及注釋: .41實(shí)驗(yàn)九 建立哈夫曼樹與哈夫曼樹與碼.509.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.509.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .509.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.50 9.4 運(yùn)行輸出結(jié)果:.50 9.5 源程序及注釋: .50實(shí)驗(yàn)十 圖.5310.1 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):.5310.2 程序設(shè)計(jì)的基本思想,原理和算法描述: .5310.3 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:.53 10.

5、4 運(yùn)行輸出結(jié)果:.53 10.5 源程序及注釋: .53實(shí)驗(yàn)一 學(xué)生成績分析程序一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):【題目】設(shè)一個班有10個學(xué)生,每個學(xué)生有學(xué)號,以及數(shù)學(xué)、物理、英語、語文、體育 5 門課的成績信息。分別編寫3個函數(shù)以實(shí)現(xiàn)以下3個要求:(1) 求數(shù)學(xué)的平均成績。(2) 對于有兩門以上課程不及格的學(xué)生,輸出他們的學(xué)號、各門課成績及平均成績。(3) 輸出成績優(yōu)良的學(xué)生(平均成績在85分以上或全部成績都在80分以上)的學(xué)號、各門課成績和平均成績。二、 程序設(shè)計(jì)的基本思想,原理和算法描述:【算法描述】(1)用數(shù)組id3,name10,score5來記錄是個學(xué)生的各門課程的成績.將

6、數(shù)學(xué)科目的成績相加再求出平均成績。(2)取一個未知數(shù)A來求學(xué)生的不及格數(shù),a>=2時輸出學(xué)生的名字學(xué)號和成績。(3)求出所有的成績的平均分并輸出各門成績和平均成績。三、調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:基本上是輸入時的細(xì)節(jié)如大括號的位置等。四、運(yùn)行輸出結(jié)果五、源程序及注釋:輸入學(xué)生的學(xué)號姓名和成績:#include"stdio.h"struct STUDENTchar id3;char name10;int score5;double ave;stu10;void main()int num=10,i,j,all=0;for(i=0;i<num;i+)

7、printf("t請輸入第%d學(xué)生的數(shù)據(jù):",i+1);printf("t學(xué)號: ");scanf("%S",stui.id);printf("t姓名: ");scanf("%s",); j=0; printf("t語文課的成績");scanf("%d",&stui.scorej);j+; printf("t數(shù)學(xué)課的成績"); scanf("%d",&stui.scorej);j+;

8、printf("t物理課的成績");scanf("%d",&stui.scorej);j+;printf("t英語課的成績");scanf("%d",&stui.scorej);j+;printf("t體育課的成績");scanf("%d",&stui.scorej); pj ();bjg();yx();輸出數(shù)學(xué)平均成績:void pj(stu10)int a,b,i;for(i=0;i<10;i+);a=a+stui.score2; b=a/1

9、0;printf("tthe everage score is:%d",b);求出不及格人數(shù):void bjg()int i,j=0,c=0;for(i=0;i<10;i+);for(j=0;j<5;i+);if(stui.scorej<60)c=c+;if("c>=2");printf("兩門課以上不及格的同學(xué):");printf("%dt%dt%dt%dt",stui.id,,stui.score);輸出優(yōu)秀學(xué)生:void yx()int i,j=0,c=0;for(i

10、=0;i<10;i+);for(j=0;j<5;i+);if(stui.scorej>=80)c=c+;if("c=5");printf("優(yōu)秀學(xué)生為:");printf("%dt%dt%dt%dt",stui.id,,stui.score); 實(shí)驗(yàn)二 線性表的基本操作一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):【題目】線性表的插入,刪除。二、 程序設(shè)計(jì)的基本思想,原理和算法描述:【算法描述】當(dāng)我們要在順序表的第i個位置上插入一個元素時,必須先將順序表中第i個元素之后的所有元素依次后移一個位置,以便騰空

11、一個位置,再把新元素插入到該位置。若是欲刪除第i個元素時,也必須把第i個元素之后的所有元素前移一個位置。三、調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:四、運(yùn)行輸出結(jié)果:五、源程序及注釋:#include<stdio.h>typedef struct linknodechar data;struct linknode *next;linnode;linnode *head;int n;創(chuàng)建線性表:void Createlist()n=0;linknode *p,*s;char x;int z=1;head=new linknode;p=head;printf("ntt請逐

12、個輸入結(jié)點(diǎn),以“X”為結(jié)素標(biāo)記!n");while(z)printf("tt輸入一個字符數(shù)據(jù),并按回車:");scanf("%c",&x);getchar();if(x!='x')s=new linknode;n+;s->data=x;p->next=s;s->next=NULL;p=s;else z=0;線性表的插入:void InsList(int i,char x)linknode *s,*p;p=head;int j=0;while(p!=NULL&&j<i)j+;p=p-

13、>next;if(p!=NULL)s=new linknode;s->data=x;s->next=p->next;p->next=s;n+;elseprintf("ntt線性表為空或插入位置超出!n");線性表的刪除:void DelList(char x)linknode *p,*q;if(head->next=NULL)printf("ntt線性表下溢!");return;if(head->next=NULL)printf("ntt線性表已經(jīng)為空!");return;q=head;p=h

14、ead->next;while(p!=NULL&&p->data!=x)q=p;p=p->next;if(p!=NULL)q->next=p->next;delete p;n-;printf("ntt結(jié)點(diǎn)已經(jīng)被刪除!");scanf("nt抱歉!沒有找到您要刪除的節(jié)點(diǎn).");實(shí)驗(yàn)三 鏈表的基本操作一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):【題目】建立線性鏈表,鏈表的插入、刪除,查找。二、 程序設(shè)計(jì)的基本思想,原理和算法描述:【算法描述】線性鏈表不需要用地址連續(xù)的存儲空間來實(shí)現(xiàn),鏈?zhǔn)酱鎯Φ木€性表對于插入、刪除操作

15、不再需要移動數(shù)據(jù)元素。三、調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:四、運(yùn)行輸出結(jié)果:五、源程序及注釋:建立線性鏈表:#include<stdio.h>typedef struct linknodechar data;struct linknode *next;linnode;linnode *head;int n;void CreateList()n=0;linnode *p,*s;char x;int z=1;head=new linnode;p=head;printf("ntt建立一個線性表");printf("ntt說明:請逐個輸入字符,結(jié)素

16、標(biāo)記為"x"!n");while(z)printf("tt put in: ");scanf("%c",&x);getchar();if(x!='x')s=new node;n+;s->data=x;s->next=s;else z=0;鏈表的插入:void InsList(int i,char x)linnode *s,*p;p=head;int j=0;while(p!=NULL&&j<i)j+;p=p->next; if(p!=NULL)s=new lin

17、node;s->data=x;s->next=p->next;p->next=s;n+;else printf("ntt線性表為空或插入位置出錯!n");鏈表的刪除:void DelList(char x)node *p,*q;if(head=NULL)printf("tt鏈表下溢!n");return;if(head->next=NULL)printf("tt線性表已經(jīng)為空!");return;q=head;p=head->next;while(p!=NULL&&p->dat

18、a!=x)q=p;p=p->next;if(p!=NULL)q->next=p->next;delete p;n-;printf("tt已經(jīng)被刪除!n");elseprintf("tt未找到!n");鏈表的查找:實(shí)驗(yàn)四 單鏈表綜合實(shí)驗(yàn)一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):【題目】(1)、建立自己的有關(guān)單鏈表的頭文件(2)、單鏈表基本操作的實(shí)現(xiàn)問題描述要在帶頭結(jié)點(diǎn)的單鏈表h中第i個數(shù)據(jù)元素之前插入一個數(shù)據(jù)元素x ,首先需要在單鏈表中尋找到第i-1個結(jié)點(diǎn)并用指針p指示,然后申請一個由指針s 指示的結(jié)點(diǎn)空間,并置x為其數(shù)據(jù)域值,最后修改第i

19、-1個結(jié)點(diǎn),并使x結(jié)點(diǎn)的指針指向第i個結(jié)點(diǎn),要在帶頭結(jié)點(diǎn)的單鏈表h中刪除第i個結(jié)點(diǎn),首先要計(jì)數(shù)尋找到第i個結(jié)點(diǎn)并使指針p指向其前驅(qū)第i-1個結(jié)點(diǎn),然后刪除第i個結(jié)點(diǎn)并釋放被刪除結(jié)點(diǎn)空間。二、 程序設(shè)計(jì)的基本思想,原理和算法描述:【算法描述】鏈?zhǔn)酱鎯Y(jié)構(gòu)不是隨機(jī)存儲結(jié)構(gòu),即不能直接取到單鏈表中某個結(jié)點(diǎn),而要從單鏈表的頭結(jié)點(diǎn)開始一個一個地計(jì)數(shù)尋找。三、調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:四、運(yùn)行輸出結(jié)果:五、源程序及注釋:# include <stdio.h ># include <malloc.h >typedef char DataType ;建立數(shù)組:type

20、def struct node DataType data; struct node *next; ListNode;產(chǎn)生頭結(jié)點(diǎn):void Init_List(ListNode *L)(*L)=(ListNode *)malloc(sizeof(ListNode);(*L)->next=NULL;測量單鏈表長度:int List_Length(ListNode *L )int n=0;ListNode *p=L->next;while(p!=NULL)n+;p=p->next;return n;單鏈表的查找第i個節(jié)點(diǎn):ListNode* GetNode(ListNode *L

21、,int i) int j;ListNode *p; p=L;j=0; /*從頭結(jié)點(diǎn)開始掃描*/ while(p->next&&j!=i) /*順指針向后掃描,直到p->next為NULL或i=j為止*/ p=p->next; j+; if(i=j) return p; /*找到了第i個結(jié)點(diǎn)*/ else return NULL; /*當(dāng)i<0或i>j時,找不到第i個結(jié)點(diǎn)*/ 單鏈表在第i個節(jié)點(diǎn)插入:void InsertList(ListNode *L,DataType x,int i) ListNode *p,*s; p=GetNode(L,i

22、-1); /*尋找第i-1個結(jié)點(diǎn)*/ if (p=NULL) /*i<1或i>n+1時插入位置i有錯*/ printf("error!"); return ; s=(ListNode *)malloc(sizeof(ListNode); /*建立一個新的節(jié)點(diǎn)*/ s->data=x;s->next=p->next;p->next=s; /*將節(jié)點(diǎn)插入單鏈表*/ 刪除單鏈表第i個節(jié)點(diǎn):void DeleteList(ListNode *L ,int i)ListNode *p,*r;p=GetNode(L,i-1); /*找到第i-1個結(jié)點(diǎn)

23、*/if (p=NULL|p->next=NULL) printf("error!"); return ; r=p->next; /*使r指向被刪除的結(jié)點(diǎn)a*/p->next=r->next; /*將ai從鏈上刪除*/free(r); 使用頭插法建立帶頭結(jié)點(diǎn)鏈表算法:ListNode * CreatListF(void)char ch;ListNode *head=(ListNode *)malloc(sizeof(ListNode); /*生成頭結(jié)點(diǎn)*/ListNode *s; /*工作指針*/head->next=NULL; ch=getc

24、har(); /*讀入第1個字符*/while(ch!='n') s=(ListNode *)malloc(sizeof(ListNode); /*生成新結(jié)點(diǎn)*/ s->data=ch; /*將讀入的數(shù)據(jù)放入新結(jié)點(diǎn)的數(shù)據(jù)域中*/ s->next=head->next; head->next=s; ch=getchar(); /*讀入下一字符*/return head; 使用尾插法建立帶頭結(jié)點(diǎn)鏈表算法:ListNode * CreatListR1(void) char ch; ListNode *head=(ListNode *)malloc(sizeof

25、(ListNode); /*生成頭結(jié)點(diǎn)*/ ListNode *s,*r; /*工作指針*/ r=head; /*尾指針初值也指向頭結(jié)點(diǎn)*/ while(ch=getchar()!='n') s=(ListNode *)malloc(sizeof(ListNode); s->data=ch; r->next=s; r=s; r->next=NULL; /*終端結(jié)點(diǎn)的指針域置空,或空表的頭結(jié)點(diǎn)指針域置空*/ return head; /*復(fù)制鏈表A中的內(nèi)容到表B中*/ void copy(ListNode *a, ListNode *b) ListNode *p

26、a=a->next; ListNode *u; ListNode *rb=b; while(pa!=NULL) u=( ListNode *)malloc(sizeof(ListNode); u->data=pa->data; rb->next=u; rb=u; pa=pa->next;rb->next=NULL;/*輸出帶頭結(jié)點(diǎn)的單鏈表*/void DisplaySL(ListNode *la, char *comment) ListNode *p ; p=la->next ; if(p)printf("n%sn" , comme

27、nt) ; while(p)printf("%4c",p->data);p=p->next; printf("n") ;/*主函數(shù)*/main( ) ListNode *la ,*lb,*lc, *p ;int n,x,i;printf("n用頭插法建立鏈表la,請輸入節(jié)點(diǎn)內(nèi)容:");la=CreatListF();DisplaySL(la,"新生成鏈la節(jié)點(diǎn)內(nèi)容:"); printf("n鏈表la的長度: %2d",List_Length(la);printf("n請輸入

28、要插入的元素: ");scanf("%c",&x) ;printf("n請輸入要插入的位置:");scanf("%d",&i) ;InsertList(la,x,i);DisplaySL(la,"插入后鏈la節(jié)點(diǎn)內(nèi)容");printf("n請輸入要刪除元素的位置:");scanf("%d",&i);DeleteList(la,i);DisplaySL(la, "刪除后鏈la節(jié)點(diǎn)內(nèi)容");printf("n用尾插法

29、建立鏈表lb,請輸入節(jié)點(diǎn)內(nèi)容:");fflush(stdin);lb=CreatListR1();DisplaySL(lb,"新生成鏈lb節(jié)點(diǎn)內(nèi)容:"); Init_List(&lc);copy(la,lc);DisplaySL(lc,"復(fù)制生成的鏈lc節(jié)點(diǎn)內(nèi)容:"); 實(shí)驗(yàn)五 串一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):串的基本運(yùn)算:創(chuàng)建一個串;串的復(fù)制;求串的長度;求子串;輸入一個自串;刪除一個子串;連接兩個串;輸出串?!绢}目】1、下列是一個置換函數(shù),采用順序存儲方式存儲串,將串s1中的第I個字符開始的j個字符(包括第I個字符)構(gòu)成的

30、子串用s2串進(jìn)行替換,函數(shù)名為replace(s1,I,j,s2)。例如:replace(“abcd”,1,3,xyz”)返回”xyzd”。(填空)二、程序設(shè)計(jì)的基本思想,原理和算法描述:先提取s1中位置I之前的所有字符構(gòu)成的子串str1,再提取位置I+j-1及之后的所有字符構(gòu)成的子串 str2,最后將str1,s2,str2連接起來便構(gòu)成了結(jié)果串三、 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:四、 運(yùn)行輸出結(jié)果:【題目】1、下列是一個置換函數(shù),采用順序存儲方式存儲串,將串s1中的第I個字符開始的j個字符(包括第I個字符)構(gòu)成的子串用s2串進(jìn)行替換,函數(shù)名為replace(s1,I,j,s2

31、)。例如:replace(“abcd”,1,3,xyz”)返回”xyzd”。(填空)# include <stdio.h># include <string.h>#define MaxLen 20typedef structchar ch MaxLen;int len; strtype;void create (strtype *s, char str)strcpy (s->ch, str);s->len=strlen (str);void disp(strtype *s)if (s->len= =0)printf( “空串n”);else print

32、f(“%cn”,s->ch);strtype replace(strtype *sl, int I, int j, strtype *s2)strtype s;int n, k;if (I+j-1<=s1->len)for (n=0;n<I-1;n+)s.chn=s1->chn;for (n=0;n<s2->len;n+)s.chI+n-1=s2->chn;s.len=I+s2->len-1;for (n=s.len, k=I+j-1;k<s1-len;n+.k+)s.chn=s1->chk;s.len=n;s.chs.len=

33、0;elses.ch0=0;s.len=0;return(s);void main()strtype s,s1,s2;int pos, n;char strmaxlen;printf(“字符串:”);gets(str);create (&s1, str);printf( “位置:”);scanf(“%d”,& create (strtype *s, char str) );printf( “長度:”);scanf(“%d”,& disp(strtype *s) );printf(“子串:”);gets( *s2 );create(&s2, str);s=repl

34、ace(&s1, pos, n, &s2);disp(&s);輸出:字符串:12345678位置: 3長度: 4子串:abcdefgh五、 源程序及注釋:實(shí)驗(yàn)六、循環(huán)隊(duì)列的實(shí)現(xiàn)與運(yùn)算一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):1掌握隊(duì)列“先進(jìn)先出”的特點(diǎn);2.復(fù)習(xí)隊(duì)列的入隊(duì)、出隊(duì)、插入、刪除等基本運(yùn)算;3.掌握循環(huán)隊(duì)列的特點(diǎn),以及循環(huán)隊(duì)列的應(yīng)用。 二、 程序設(shè)計(jì)的基本思想,原理和算法描述1.在順序存儲結(jié)構(gòu)上實(shí)現(xiàn)輸出受限制的雙端循環(huán)隊(duì)列的入隊(duì)和出隊(duì)(只允許隊(duì)頭輸出)算法;2.設(shè)每個元素表示一個待處理的作業(yè),元素值表示作業(yè)的預(yù)計(jì)時間。入隊(duì)列采取簡化的短作業(yè)優(yōu)先原則,若一個新提交

35、的作業(yè)的預(yù)計(jì)執(zhí)行時間小于隊(duì)頭和隊(duì)尾作業(yè)的平均時間,則插入在隊(duì)頭,否則插入在隊(duì)尾。3.循環(huán)隊(duì)列數(shù)據(jù)類型:#define MAXLEN 10Typedef structInt dataMAXLEN;Int front,rear;csequeue;4.入隊(duì)作業(yè)處理的預(yù)計(jì)執(zhí)行時間可以用隨機(jī)數(shù)函數(shù)rand()產(chǎn)生,也可以從鍵盤輸入。三、 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:四、 運(yùn)行輸出結(jié)果:五、 源程序及注釋:#include<stdio.h>#define MAXLEN 10typedef struct int dataMAXLEN; / 定義數(shù)據(jù)的類型 int front,re

36、ar; / 定義隊(duì)頭、隊(duì)尾指針csequeue;csequeue q; void IniQueue() / 初始化隊(duì)列 q.front=q.rear=MAXLEN-1; void InQueue() / 入隊(duì)函數(shù) int x ; printf("ntt 輸入一個入隊(duì)的整數(shù)數(shù)據(jù):"); scanf("%d",&x); if (q.front=(q.rear+1) % MAXLEN ) printf("ntt 隊(duì)滿,不能入隊(duì)! n"); return; q.rear=(q.rear+1) % MAXLEN; q.dataq.rea

37、r=x; printf("ntt 入隊(duì)成功! n"); void Outsequeue() / 出隊(duì)函數(shù) if (q.front=q.rear) printf ("ntt 此隊(duì)列為空! "); return ; / 隊(duì)空不能出隊(duì) else q.front=(q.front+1) % MAXLEN; printf("ntt 出隊(duì)元素為:%dn",q.dataq.front); / 輸出隊(duì)頭元素 return; void ShowQueue() / 顯示函數(shù) int k=q.front; if (k=q.rear) printf(&quo

38、t;ntt 此隊(duì)列為空! n"); return; printf("ntt 此隊(duì)列元素為:"); do k=(k+1)%MAXLEN; printf("%4d",q.datak); while(k!=q.rear); printf("n");int length() int k; k=(q.rear-q.front+MAXLEN)% MAXLEN; return k;void main() / 主函數(shù) int i=1; int choice; IniQueue(); while (i) printf("ntt 循

39、環(huán) 隊(duì) 列n");printf("ntt*");printf("ntt* 1-進(jìn) 隊(duì) *");printf("ntt* 2-出 隊(duì) *");printf("ntt* 3-顯 示 *"); printf("ntt* 4-求 隊(duì) 列 長 度 *");printf("ntt* 0-返 回 *");printf("ntt*");printf("nntt 請選擇菜單號: ");scanf("%d",&choi

40、ce);switch(choice) case 1: InQueue(); break; case 2: Outsequeue(); break; case 3: ShowQueue(); break; case 4: printf("ntt 隊(duì)列長度為: %d n",length();break; case 0: i=0; break; 實(shí)驗(yàn)七、棧子系統(tǒng)一、 上機(jī)實(shí)驗(yàn)的問題和要求(需求分析):【題目】(1)設(shè)計(jì)一個字符型的鏈棧。(2)編寫進(jìn)棧、出棧、顯示棧中全部元素的程序。(3)編寫一個把十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的應(yīng)用程序。(4)編寫一個把中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式(逆波

41、蘭式)的應(yīng)用程序。(5)設(shè)計(jì)一個選擇式菜單,以菜單方式選擇上訴操作。二、 程序設(shè)計(jì)的基本思想,原理和算法描述:利用棧“后進(jìn)先出”的特點(diǎn)做成一個存儲數(shù)據(jù)的系統(tǒng)。三、 調(diào)試和運(yùn)行程序過程中產(chǎn)生的問題及采取的措施:四、 運(yùn)行輸出結(jié)果:五、 源程序及注釋:#include<stdio.h>#include<stdlib.h>#define STACKMAX 100/*建立結(jié)構(gòu)體*/typedef struct stacknodeint data;struct stacknode *next;stacknode;typedef structstacknode *top;/*指向棧

42、頂?shù)闹羔?/linkstack;/*進(jìn)棧*/void Push(linkstack *s,int x)stacknode *p=new stacknode;/*建立一個新的結(jié)點(diǎn)*/p->data=x;p->next=s->top;s->top=p;/*出棧*/int Pop(linkstack *s)int x;stacknode *p=s->top;x=p->data;s->top=p->next;delete p;return x;/*顯示棧的內(nèi)容*/void ShowStack(linkstack *s)stacknode *p=s->

43、;top;if(p=NULL)printf("ntt棧為空.");elseprintf("ntt棧元素為:");while(p!=NULL)printf("%6d",p->data);p=p->next;printf("n");/*十進(jìn)制轉(zhuǎn)二進(jìn)制*/ void ConversionB(int n)linkstack s;int x;s.top=NULL;/*置棧空*/dox=n%2;/*取余數(shù)*/n=n/2;/*取新的商*/stacknode *p=new stacknode;/*申請新的結(jié)點(diǎn)*/p-&

44、gt;next=s.top;s.top=p;s.top->data=x;while(n);printf("ntt轉(zhuǎn)換后的二進(jìn)制數(shù)值為:");while(s.top)printf("%d",s.top->data);stacknode *p=s.top;s.top=s.top->next;delete p;printf("n");getchar();/十進(jìn)制轉(zhuǎn)十六進(jìn)制(1)void ConversionX1(int n)linkstack s;int x;s.top=NULL;dox=n%16;n=n/16;stack

45、node *p=new stacknode;p->next=s.top;s.top=p;s.top->data=x;while(n);printf("ntt轉(zhuǎn)換后的十六進(jìn)制數(shù)值為:");while(s.top)if(s.top->data=10)printf("A");else if(s.top->data=11)printf("B");else if(s.top->data=12)printf("C");else if(s.top->data=13)printf("D");else if(s.top->data=14)printf("E");else if(s.top->data=15)printf("F");else printf("%d",s.top->data);stacknode *p=s.top;s.top=s.top->nex

溫馨提示

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

評論

0/150

提交評論