版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
..《數(shù)據(jù)結(jié)構(gòu)》課程實驗實訓報告實驗名稱棧與隊列實驗序號3學號14302043姓名陳前方班級信管本二實驗日期指導教師金照林成績一、實驗目的和要求目的:掌握堆棧和隊列數(shù)據(jù)結(jié)構(gòu)描述,學會針對堆棧和隊列的基本操作。要求:掌握C語言結(jié)構(gòu)化程序設計思想,結(jié)構(gòu)數(shù)據(jù)類型,指針數(shù)據(jù)類型。二、實驗具體內(nèi)容及步驟實現(xiàn)課本中鏈式堆?!瞤64-p66的基本操作,并編制主函數(shù)實際運行驗證其正確性。鏈式堆棧設計。要求:用鏈式堆棧設計實現(xiàn)堆棧,堆棧的操作集合包括:初始化、非空否、入棧、出棧、取棧頂數(shù)據(jù)元素。設計一個主函數(shù)對鏈式堆棧進行測試。測試方法為依次把數(shù)據(jù)元素1、2、3、4、5入棧,然后出棧并在屏幕上顯示出棧的數(shù)據(jù)元素。定義數(shù)據(jù)元素的數(shù)據(jù)類型為如下形式的結(jié)構(gòu)體:typedefstruct{ chartaskName[10];//任務名 inttaskNo;//任務號}DataType;首先設計一個包含5個數(shù)據(jù)的測試數(shù)據(jù),然后設計一個主函數(shù)對鏈式堆棧進行測試。測試的方法為:依次把5個元素入棧,然后出棧并在屏幕上顯示出棧的數(shù)據(jù)元素。實現(xiàn)課本中順序循環(huán)隊列〔p75-p77的基本操作,并編制主函數(shù)實際運行驗證其正確性。對順序循環(huán)隊列,常規(guī)的方法是使用隊尾指針和隊頭指針,隊尾指針用于指示當前的隊尾位置下標,隊頭指針用于指示當前的隊頭位置下標。現(xiàn)要求:設計一個使用隊頭指針和計數(shù)器的順序循環(huán)隊列抽象數(shù)據(jù)類型,其中操作包括:初始化、入隊列、出隊列、取隊頭元素和判斷隊列是否為空。設計一個測試主函數(shù)進行測試。三、實驗結(jié)果與分析〔程序代碼按序粘貼在下面,并將運行結(jié)果截圖1.#include<stdio.h>#include<stdlib.h>typedefintDataType;typedefstructsnode{ DataTypedata; structsnode*next;}LSNode;/*初始化操作:*/voidStackInitiate<LSNode**head>/*初始化帶頭結(jié)點鏈式堆棧*/{ if<<*head=<LSNode*>malloc<sizeof<LSNode>>>==NULL>exit<1>;<*head>->next=NULL;}/*判非空操作:*/intStackNotEmpty<LSNode*head>/*判堆棧是否非空,非空返回1;空返回0*/{ if<head->next==NULL>return0;elsereturn1;}/*入棧操作:*/intStackPush<LSNode*head,DataTypex>/*把數(shù)據(jù)元素x插入鏈式堆棧head的棧頂作為新的棧頂*/{LSNode*p;if<<p=<LSNode*>malloc<sizeof<LSNode>>>==NULL>{printf<"內(nèi)存空間不足無法插入!\n">;return0;}p->data=x;p->next=head->next;/*新結(jié)點鏈入棧頂*/head->next=p;/*新結(jié)點成為新的棧頂*/return1;}/*出棧操作:*/intStackPop<LSNode*head,DataType*d>/*出棧并把棧頂元素由參數(shù)d帶回*/{LSNode*p=head->next;if<p==NULL>{ printf<"堆棧已空出錯!">; return0;}head->next=p->next;/*刪除原棧頂結(jié)點*/*d=p->data;/*原棧頂結(jié)點元素賦予d*/free<p>;/*釋放原棧頂結(jié)點內(nèi)存空間*/return1;}/*取棧頂數(shù)據(jù)元素操作:*/intStackTop<LSNode*head,DataType*d>/*取棧頂元素并把棧頂元素由參數(shù)d帶回*/{ LSNode*p=head->next; if<p==NULL> { printf<"堆棧已空出錯!">; return0; } *d=p->data; return1;}/*撤銷*/voidDestroy<LSNode*head>{ LSNode*p,*p1; p=head; while<p!=NULL> { p1=p; p=p->next; free<p1>; }}voidmain<void>{ LSNode*myStack; inti,x; StackInitiate<&myStack>; for<i=0;i<5;i++> { if<StackPush<myStack,i+1>==0> { printf<"error!\n">; return; } } if<StackTop<myStack,&x>==0> { printf<"error!\n">; return; } else printf<"Theelementoflocaltopis:%d\n",x>; printf<"Thesequenceofoutingelementsis:\n">; while<StackNotEmpty<myStack>> { StackPop<myStack,&x>; printf<"%d",x>; } printf<"\n">; Destroy<myStack>; printf<"Thisprogramismadeby10273206\n">;}2.#include<stdio.h>#include<stdlib.h>#defineMaxStackSize100typedefintDataType;typedefstruct{ DataTypestack[MaxStackSize];; inttop;}SeqStack;/*初始化操作:*/voidStackInitiate<SeqStack*S>/*初始化帶頭結(jié)點鏈式堆棧*/{ S->top=0;}intStackNotEmpty<SeqStackS>{ if<S.top<=0> return0; else return1;}/*入棧操作:*/intStackPush<SeqStack*S,DataTypex>{ if<S->top>=MaxStackSize> { printf<"堆棧已滿無法插入!\n">; return0; } else { S->stack[S->top]=x; S->top++; return1; }}intStackPop<SeqStack*S,DataType*d>{ if<S->top<=0> { printf<"堆棧已空無數(shù)據(jù)元素出棧!\n">; return0; } else { S->top--; *d=S->stack[S->top]; return1; }}intStackTop<SeqStackS,DataType*d>{ if<S.top<=0> { printf<"堆棧已空!\n">; return0; } else { *d=S.stack[S.top-1]; return1; }}voidmain<void>{ SeqStackmyStack; inti,x; StackInitiate<&myStack>; for<i=0;i<5;i++> { if<StackPush<&myStack,i+1>==0> { printf<"錯誤\n">; return; } } if<StackTop<myStack,&x>==0> { printf<"錯誤\n">; return; } else printf<"當前棧頂元素為:%d\n",x>; printf<"依次出棧的數(shù)據(jù)元素序列如下:\n">; while<StackNotEmpty<myStack>> { StackPop<&myStack,&x>; printf<"%d",x>; }}3.#include"stdio.h"#include"string.h"#include"stdlib.h"#defineMaxQueueSize100typedefintDataType;typedefstruct{ DataTypequeue[MaxQueueSize]; intrear; intfront; intcount;}SeqCQueue;voidQueueuInitiate<SeqCQueue*Q>{ Q->rear=0; Q->front=0; Q->count=0;}intQueueNotEmpty<SeqCQueueQ>{ if<Q.count!=0> return1; else return0;}intQueueAppend<SeqCQueue*Q,DataTypex>{ if<Q->count>0&&Q->rear==Q->front> { printf<"隊列已滿無法插入!\n">; return0; } else { Q->queue[Q->rear]=x; Q->rear=<Q->rear+1>%MaxQueueSize; Q->count++; return1; }}intQueueDelete<SeqCQueue*Q,DataType*d> { if<Q->count==0> { printf<"隊列已空無數(shù)據(jù)元素出隊列!\n">; return0; } else { *d=Q->queue[Q->front]; Q->front=<Q->front+1>%MaxQueueSize; Q->count--; return1; } }intQueueGet<SeqCQueueQ,DataType*d>{ if<Q.count==0> { printf<"隊列已空無數(shù)據(jù)可取\n">; return0; } else { *d=Q.queue[Q.front]; return1; }}voidmain<void>{ SeqCQueuemyQueue; inti,x; QueueuInitiate<&myQueue>; for<i=0;i<5;i++> { if<QueueAppend<&myQueue,i+1>==0> { printf<"error!\n">; return; } } if<QueueGet<myQueue,&x>==0> { printf<"error!\n">; return; } else printf<"隊頭元素是:%d\n",x>; printf<"依次出棧數(shù)據(jù)元素順序是:\n">; while<QueueNotEmpty<myQueue>> { QueueDelete<&myQueue,&x>; printf<"%d",x>; }}4.#include"stdio.h"#include"string.h"#include"stdlib.h"#defineMaxQueueSize100typedefintDataType;typedefstruct{ DataTypequeue[MaxQueueSize]; intrear; intfront; intcount;}SeqCQueue;voidQueueuInitiate<SeqCQueue*Q>{ Q->rear=0; Q->front=0; Q->count=0;}intQueueNotEmpty<SeqCQueueQ>{ if<Q.front!=Q.rear> return1; else return0;}intQueueAppend<SeqCQueue*Q,DataTypex>{ if<Q->front==<Q->rear+1>%MaxQueueSize> { printf<"隊列已滿無法插入!\n">; return0; } else { Q->queue[Q->rear]=x; Q->rear=<Q->rear+1>%MaxQueueSize; Q->count++; return1; }}intQueueDelete<SeqCQueue*Q,DataType*d> { if<Q->front==Q->rear> { printf<"隊列已空無數(shù)據(jù)元素出隊列!\n">; return0; } else {
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學農(nóng)業(yè)生態(tài)與環(huán)境保護(環(huán)保技術應用)試題及答案
- 2025年7月國開電大??啤豆芾韺W基礎》期末紙質(zhì)考試試題及答案
- 痘痘培訓教學課件
- 高級詞匯話術
- 2026四川涼山州公安局招聘30人備考題庫及答案詳解(考點梳理)
- 廣西玉林市八校2025-2026學年高二上學期12月聯(lián)合調(diào)研測試語文試卷(含答案)
- 2026北京順義航旅縱橫校招備考題庫及完整答案詳解1套
- 2025河南洛陽市汝陽縣審計局輔助性崗位招聘勞務派遣人員4人備考題庫有完整答案詳解
- 2026四川宜賓銘星中醫(yī)醫(yī)院人才招募中醫(yī)醫(yī)生、外科醫(yī)生、編碼員備考題庫及答案詳解參考
- 2026東風越野車有限公司招聘14人備考題庫(湖北)有答案詳解
- 安全防范系統(tǒng)安裝維護員題庫
- mbd技術體系在航空制造中的應用
- 苗木育苗方式
- 通信原理-脈沖編碼調(diào)制(PCM)
- 進階切分技法advanced funk studies rick latham-藍色加粗字
- 省直單位公費醫(yī)療管理辦法實施細則
- 附錄 阿特拉斯空壓機操作手冊
- JJG 693-2011可燃氣體檢測報警器
- GB/T 39557-2020家用電冰箱換熱器
- BB/T 0019-2000包裝容器方罐與扁圓罐
- 凝氣式汽輪機和離心式壓縮機
評論
0/150
提交評論