華中科技大學計算機學院C實驗報告-實驗一_第1頁
華中科技大學計算機學院C實驗報告-實驗一_第2頁
華中科技大學計算機學院C實驗報告-實驗一_第3頁
華中科技大學計算機學院C實驗報告-實驗一_第4頁
華中科技大學計算機學院C實驗報告-實驗一_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向?qū)ο蟪绦蛟O計實驗報告課 程 實 驗 報 告課程名稱:面向?qū)ο蟪绦蛟O計實驗名稱:面向?qū)ο蟮恼蜅>幊淘?系 : 計算機科學與技術 專業(yè)班級 : CS1209班 學 號 : 姓 名 : 指導教師 : 李春花 2014 年 1 月 22 日1、 需求分析1. 題目要求整型棧是一種先進后出的存儲結(jié)構(gòu),對其進行的操作通常包括判斷棧是否為空、向棧頂添加一個整型元素、出棧等。整型棧類型及其操作函數(shù)采用非面向?qū)ο蟮募僀語言定義,請將完成上述操作的所有函數(shù)采用純C語言編程, 然后寫一個main函數(shù)對棧的所有操作函數(shù)進行測試。struct STACK int *elems;/申請內(nèi)存用于存放棧的元素 int

2、max;/棧能存放的最大元素個數(shù) int pos;/棧實際已有元素個數(shù),??諘rpos=0;void initSTACK(STACK *const p, int m);/初始化p指向的棧:最多m個元素void initSTACK(STACK *const p, const STACK&s); /用棧s初始化p指向的棧int size (const STACK *const p);/返回p指向的棧的最大元素個數(shù)maxint howMany (const STACK *const p);/返回p指向的棧的實際元素個數(shù)posint getelem (const STACK *const p, int

3、x);/取下標x處的棧元素STACK *const push(STACK *const p, int e); /將e入棧,并返回pSTACK *const pop(STACK *const p, int &e); /出棧到e,并返回pSTACK *const assign(STACK*const p, const STACK&s); /賦s給p指的棧,并返回pvoid print(const STACK*const p);/打印p指向的棧void destroySTACK(STACK*const p);/銷毀p指向的棧2. 需求分析本次實驗要求用C語言的方法實現(xiàn)對棧的基本操作,所要求的操作包括

4、初始化棧,用另一個棧初始化棧,并進行出棧入棧操作,還有輸出棧中的元素,用另一個占合并已存在的棧,摧毀棧等操作。2、 系統(tǒng)設計概要設計用結(jié)構(gòu)實現(xiàn)棧,此結(jié)構(gòu)包括指向棧的指針,最大容量,和當前的元素個數(shù)等三個元素。要求是棧的元素是棧元素類型是整形。主要包括棧的輸入輸出和賦值算法,由于這些算法比較簡單,所以在這里不用多解釋。在完成本任務時,用STACK S 的實現(xiàn)采用了,用定義并且初始化好的數(shù)組復制給S的第一元素,并且第二第三元素用賦值語句實現(xiàn)。具體實現(xiàn)如下:int a5=1,2,3,4,5;STACK s=a,5,5;實現(xiàn)將e入棧,并返回p用能的時候,采用了先判斷棧的最大容量夠不夠的問題,如果不夠重

5、新分配空間,并且讓e入棧,并且返回新的p的指針。3、 軟件開發(fā)所有代碼我用CodeBlocks進行編寫和調(diào)試。4、 軟件測試1)總界面如圖1所示:圖12)初始化p指向的棧:最多m個元素,如圖2所示:圖23)用棧s初始化p指向的棧然后用功能7顯示內(nèi)容 如圖3所示:圖34)將e入棧,并返回p,如圖5所示。先用操作2,用是初始化pset,然后用功能4,輸入一個元素,并且用功能7,顯示內(nèi)容。運行結(jié)果如圖4所示:圖45)出棧到e,并返回p,結(jié)果如圖5所示:圖56)賦s給p指的棧,并返回p,如圖8所示。先讓pset的內(nèi)容和s的內(nèi)容不一樣,然后用功能6,讓s覆蓋pset的內(nèi)容,最后用功能7來顯示內(nèi)容。結(jié)果如

6、圖6所示:圖67)銷毀p指向的棧,如圖7所示:圖75、 過程和體會1. 遇到的主要問題和解決方法在申請棧的時候,不知道怎么分配空間,也忘了分配空間,后來經(jīng)過跟同學們的交流終于順利的完成了任務。2. 課程設計的體會本次實驗是對之前學習過的C語言中棧的基本操作的鞏固,利用C語言知識,再加上C+新學的知識,對整型棧進行一系列的操作。主要來說本次實驗相對簡單,對棧操作有了更進一步的了解。6、 源碼和說明1. 文件清單及其功能說明main.c 是源代碼 fers.exe 是可執(zhí)行文件2. 用戶使用說明書個人利用CodeBlocks進行編譯的,只要能編譯C/C+的編譯器都可以進行調(diào)試。3. 源代碼#inc

7、lude#include#includeint sit;void menu(void) printf(t*n); printf(t 1.初始化p指向的棧:最多m個元素); printf(tt 2.用棧s初始化p指向的棧n); printf(t 3.返回p指向的棧的實際元素個數(shù)pos); printf(t 4.將e入棧,并返回pn); printf(t 5.出棧到e,并返回p); printf(ttt 6.賦s給p指的棧,并返回pn); printf(t 7.打印p指向的棧); printf(ttt 8.銷毀p指向的棧n); printf(tttt 0.退出程序n); printf(t*n);t

8、ypedef struct STACK int *elems; /申請內(nèi)存用于存放集合的元素 int max; /集合能存放的最大元素個數(shù) int pos;/集合實際已有元素個數(shù),集合空時pos=0; STACK;void initSTACK(STACK *const p, int m)p-max=m;sit=m; p-elems=(int*)malloc(m*sizeof(int); p-pos=0;void initSTACK(STACK* pset, const STACK&s) initSTACK(pset,s.max); int i; if(s.elems=NULL) printf(

9、s棧為空,請初始化s!n); else for(i=0;ielemsi=s.elemsi; pset-pos+; int howMany (const STACK *const p) return (p-pos);STACK *const push(STACK *const p, int e) int m; if(p-pos=p-max) printf(棧已經(jīng)為滿n); printf(是否擴展棧?1為是,0為否n); scanf(%d,&m); if(m=1) p-elems=(int*)realloc(p,(p-pos+1)*sizeof(int); p-elemsp-pos+1=e; p-

10、pos=p-pos+1; return (p); else printf(插入失敗n); else p-elemsp-pos=e; p-pos=p-pos+1; return (p); STACK *const pop(STACK *const p, int &e) int n; if(p-pos=0) printf(棧為空!); else e=p-elemsp-pos-1; p-pos-; return (p);STACK *const assign(STACK*const p, const STACK&s) p-elems=s.elems; p-max=s.max; p-pos=s.pos

11、; return p;void print(STACK*p) int i; if(p-pos=0) printf(棧為空!n); printf(最大容量為:t%d,p-max); else printf(最大容量為:t%d,p-max); printf(n當前的數(shù):n%dn,p-pos); printf(里面的元素為:n); for(i=p-pos-1;i=0;i-) printf(%dt,p-elemsi); void destroySTACK(STACK*const p) free(p-elems); p-max=0; p-pos=0; if(p-max=0) printf(摧毀棧成功!)

12、; else printf(摧毀棧未成功npos=%d!,p-pos);int main()int a5=1,2,3,4,5;STACK *pset=new STACK;STACK s=a,5,5; int op;int e,m=0;int i;char b;int t;int e1;do system(cls); menu(); printf(請輸入序號:); scanf(%d,&op);switch(op) case 1:printf( ); printf(請輸入棧的最大容量m:); scanf(%d,&m); initSTACK(pset,m); getchar();getchar();

13、 break;case 2: initSTACK(pset,s); getchar();getchar(); break; case 3: t=howMany(pset); printf(總共為%d個元素n,t); getchar();getchar(); break; case 4: if(sit=0) printf(請初始化!n); else printf(請輸入想壓棧的元素e:); scanf(%d,&e); pset=push(pset,e); getchar();getchar();break; case 5: pset=pop(pset,e1); printf(棧頂元素為:t%d,e1); getchar();getchar(); brea

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論