栈和队列实验报告

(规格为A4纸或A3纸折叠)

注:1、实验报告的内容: 一、实验目的;二、实验原理;三、实验步骤;四、实验结果;五、讨论分析

(完成指定的思考题和作业题);六、改进实验建议。

    2、各专业可在满足学校对实验教学基本要求的前提下,根据专业特点自行设计实验报告的格式,所设

计的实验报告在使用前需交实践教学管理科备案。

 

第二篇:栈和队列实验报告

栈 的 顺 序 表 示 和 实 现

一、实验目的

1. 了解栈和队列的特性。

2. 掌握栈的顺序表示和实现。

3. 掌握栈的链式表示和实现。

4. 掌握队列的顺序表示和实现。

5. 掌握队列的链式表示和实现。

6. 掌握栈和队列在实际问题中的应用。

二、实验要求

1. 认真阅读和掌握本实验的程序。

2. 上机运行本程序。

3. 保存和打印出程序的运行结果,并结合程序进行分析。

4. 按照对顺序表和单链表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。

三、实验内容

编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成如下功能:

(1)初始化顺序栈。

(2)插入元素。

(3)删除栈顶元素。

(4)取栈顶元素。

(5)遍历顺序栈。

(6)置空顺序栈。

四,解题思路

五、程序清单

#include<stdio.h>

#include<stdlib.h>

#define MAXNUM 20

#define ElemType int

/*定义顺序栈的存储结构*/

typedef struct

{ ElemType stack[MAXNUM];

int top;

}SqStack;

/*初始化顺序栈*/

void InitStack(SqStack *p)

{ if(! p)

printf("内存分配失败!");

p->top=-1;

}

/*入栈*/

void Push(SqStack *p,ElemType x)

{ if(p->top<MAXNUM-1)

{ p->top=p->top+1;

p->stack[p->top]=x;

}

else

printf("Overflow!\n");

}

/*出栈*/

ElemType Pop(SqStack *p)

{ ElemType x;

if(p->top>=0)

{ x=p->stack[p->top];

printf("以前的栈顶数据元素%d已经被删除!\n",p->stack[p->top]); p->top=p->top-1;

return(x);

}

else

{ printf("Underflow!\n");

return(0);

}

}

/*获取栈顶元素*/

ElemType GetTop(SqStack *p)

{ ElemType x;

if(p->top>=0)

{ x=p->stack[p->top];

printf("\n栈顶元素喂:%d\n",x);

return(x);

}

else

{ printf("Underflow!\n");

return(0);

}

}

/*遍历顺序栈*/

void OutStack(SqStack *p)

{ int i;

printf("\n");

if(p->top<0)

printf("这是一个空栈!");

printf("\n");

for(i=p->top;i>=0;i--)

printf("第%d个数据元素是:%6d\n",i,p->stack[i]); }

/*置空顺序栈*/

void setEmpty(SqStack *p)

{ p->top=-1;}

/*主函数*/

void main()

{ SqStack *q;

int cord;ElemType a;

printf("第一次使用必须初始化!\n");

do{

printf("\n");

printf("\n----------主菜单-----------\n");

printf("\n 1 初始化顺序栈 \n"); printf("\n 2 插入一个元素 \n"); printf("\n 3 删除栈顶元素 \n"); printf("\n 4 取栈顶元素 \n"); printf("\n 5 置空顺序栈 \n"); printf("\n 6 结束程序运行 \n"); printf("\n-----------------------------\n");

printf("清输入您的选择(1,2,3,4,5,6)"); scanf("%d",&cord);

printf("\n");

switch(cord)

{ case 1:

{ q=(SqStack *)malloc(sizeof(SqStack)); InitStack(q);

OutStack(q);

}break;

case 2:

{ printf("清输要插入的元素:a="); scanf("%d",&a);

Push(q,a);

OutStack(q);

}break;

case 3:

{ Pop(q);

OutStack(q);

}break;

case 4:

{ GetTop(q);

OutStack(q);

}break;

case 5:

{ setEmpty(q);

printf("\n顺序栈被置空!\n"); OutStack(q);

}break;

case 6:

exit(0); }

}while(cord<=6); }

六、调试心得及收获

七、其他所想到的

相关推荐