(规格为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); }
六、调试心得及收获
七、其他所想到的
规格为A4纸或A3纸折叠注1实验报告的内容一实验目的二实验原理三实验步骤四实验结果五讨论分析完成指定的思考题和作业题六改进实验建议…
实验二栈和队列实现四则运算实验二栈和队列实现四则运算一实验目的及要求1掌握栈和队列的基本操作建立插入删除查找合并2掌握用栈和队列的…
20xx级数据结构实验报告实验名称实验二栈和队列日期20xx年11月15日1实验要求实验目的通过选择下面五个题目之一进行实现掌握如…
栈的顺序表示和实现一实验目的1了解栈和队列的特性2掌握栈的顺序表示和实现3掌握栈的链式表示和实现4掌握队列的顺序表示和实现5掌握队…
一实验目的和要求1理解栈和队列的特征以及它们之间的差异知道在何时使用那种数据结构2重点掌握在顺序栈上和链栈上实现栈的基本运算算法注…
实验二栈和队列实现四则运算实验二栈和队列实现四则运算一实验目的及要求1掌握栈和队列的基本操作建立插入删除查找合并2掌握用栈和队列的…
20xx级数据结构实验报告实验名称实验二栈和队列日期20xx年11月15日1实验要求实验目的通过选择下面五个题目之一进行实现掌握如…
栈的顺序表示和实现一实验目的1了解栈和队列的特性2掌握栈的顺序表示和实现3掌握栈的链式表示和实现4掌握队列的顺序表示和实现5掌握队…
一实验目的和要求1理解栈和队列的特征以及它们之间的差异知道在何时使用那种数据结构2重点掌握在顺序栈上和链栈上实现栈的基本运算算法注…