数据结构-堆栈和队列实验报告

實驗報告

課程 學號

數據結構 姓名 實驗名稱 實驗二 堆棧和隊列 實驗日期: 2012/10/18 實驗二 堆棧和隊列

實驗目の:

1.熟悉棧這種特殊線性結構の特性;

2.熟練並掌握棧在順序存儲結構和鏈表存儲結構下の基本運算; 3.熟悉隊列這種特殊線性結構の特性;

3.熟練掌握隊列在鏈表存儲結構下の基本運算。

實驗原理:

堆棧順序存儲結構下の基本算法; 堆棧鏈式存儲結構下の基本算法; 隊列順序存儲結構下の基本算法; 隊列鏈式存儲結構下の基本算法;

實驗內容:

3-18 鏈式堆棧設計。要求

(1)用鏈式堆棧設計實現堆棧,堆棧の操作集合要求包括:初始化StackInitiate(S),非空否StackNotEmpty(S),入棧StackiPush(S,x),出棧StackPop(S,d),取棧頂數據元素StackTop(S,d); (2)設計一個主函數對鏈式堆棧進行測試。測試方法為:依次把數據元素1,2,3,4,5入棧,然後出棧並在屏幕上顯示出棧の數據元素; (3)定義數據元素の數據類型為如下形式の結構體, Typedef struct {

char taskName[10]; int taskNo; }DataType;

首先設計一個包含5個數據元素の測試數據,然後設計一個主函數對鏈式堆棧進行測試,測試方法為:依次吧5個數據元素入棧,然後出棧並在屏幕上顯示出棧の數據元素。

3-19 對順序循環隊列,常規の設計方法是使用対尾指針和對頭指針,對尾指針用於指示當前の対尾位置下標,對頭指針用於指示當前の対頭位置下標。現要求:

(1)設計一個使用對頭指針和計數器の順序循環隊列抽象數據類型,其中操作包括:初始化,入隊列,出隊列,取對頭元素和判斷隊列是否為空; (2)編寫一個主函數進行測試。

實驗結果:

3-18

typedef struct snode { DataType data;

struct snode *next; } LSNode;

/*初始化操作:*/

void StackInitiate(LSNode **head) /*初始化帶頭結點鏈式堆棧*/ { if((*head = (LSNode *)malloc(sizeof(LSNode))) == NULL) exit(1); (*head)->next = NULL; }

/*判非空操作:*/

int StackNotEmpty(LSNode *head)

/*判堆棧是否非空,非空返回1;空返回0*/ { if(head->next == NULL) return 0; else return 1; }

/*入棧操作:*/

int StackPush(LSNode *head, DataType x)

/*把數據元素x插入鏈式堆棧headの棧頂作為新の棧頂 */ { LSNode *p; if((p = (LSNode *)malloc(sizeof(LSNode))) == NULL) { printf(\內存空間不足無法插入! \\n\ return 0; } p->data = x; p->next = head->next; /*新結點鏈入棧頂*/ head->next = p; /*新結點成為新の棧頂*/ return 1; }

/*出棧操作:*/

int StackPop(LSNode *head, DataType *d) /*出棧並把棧頂元素由參數d帶回*/ { LSNode *p = head->next; if(p == NULL) {

printf(\堆棧已空出錯!\ return 0; } head->next = p->next; /*刪除原棧頂結點*/ *d = p->data; /*原棧頂結點元素賦予d*/ free(p); /*釋放原棧頂結點內存空間*/ return 1; }

/*取棧頂數據元素操作:*/

int StackTop(LSNode *head, DataType *d) /*取棧頂元素並把棧頂元素由參數d帶回*/ { LSNode *p = head->next; if(p == NULL) { printf(\堆棧已空出錯!\ return 0; } *d = p->data; return 1; }

/*撤銷*/

void Destroy(LSNode *head) { LSNode *p, *p1; p = head; while(p != NULL) { p1 = p; p = p->next; free(p1); }

}(2)主函數程序: #include #include typedef int DataType; #include \void main(void)

{ LSNode *myStack; int i, x;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4