数据结构实验报告(一):实现队列和栈的各种算法及操作
佛山科学技术学院
实 验 报 告
课程名称 数据结构
实验项目 实现队列和栈的各种算法及操作
专业班级 10网络工程2 姓 名 张珂卿 学 号 2010394212
指导教师 成 绩 日 期 2011年11月9日
一、目的和要求
1. 理解队列和栈的顺序存储结构和链式存储结构。通过本实验,熟悉队列、栈的结构特
点;
2. 熟悉队列、栈结构上的操作与算法的实现。
二、实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
1. 队列的基本操作和应用;
2. 栈的基本操作和应用。
三、仪器、设备和材料
1. 适合实验要求的计算机系统;
2. ,语言编程平台。
四、实验原理与实验代码
队列与栈是一种操作受限制的线性
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
,在了解线性表的基本原理的基础上,理解与完成
此项实验。
#include
#include
#include
#define MAXSIZE 50
typedef struct QNode{
char data; //数组元素的存储结构
}QNode,*QLink;
typedef struct Queue{
QNode* front;
QNode* rear;
int size;
}*QueueArray;
/****************************
初始化队列数组
分配存储空间
初始化队头与队尾
****************************/ int InitQueue(QueueArray queue) {
QLink ql;
printf("\n初始化队列:");
ql= (QNode*)malloc(MAXSIZE*sizeof(QNode)); //分配存储空间
if(!ql)
{
printf("MEMERY ERROR!");
return 0;
}
queue->front = queue->rear = ql; //初始化队头指针与队尾指针
queue->size = 0;
return 1;
}
/********************************* 入队操作
队满条件:queue->size+1 == MAXSIZE *********************************/ int EnQueue(QueueArray queue)
{
if((queue->size+1)>MAXSIZE) //是否队满
{
printf("已经超出了预设最大队列长度%d~",MAXSIZE);
return 0;
}
fflush(stdin); //清理
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
输入流
printf("请输入入队元素:");
scanf("%c",&queue->rear->data);
queue->rear = (queue->rear)++; //队尾元素移动
queue->size++; //队长度增加
return 1;
}
/******************************
出队操作
队空条件:queue->size == 0
******************************/
int DeQueue(QueueArray queue)
{
if(0 == queue->size) //是否队空
{
printf("注意:队列已经为空!\n");
return 0;
}
printf("队头元素为:%c\n",queue->front->data);
(queue->front)++; //队头元素移动
queue->size--; //队长度减少
return 1;
}
void main()
{
QueueArray queue = (QueueArray)malloc(sizeof(QueueArray));
int choose;
InitQueue(queue);
while(1){
printf("\n请选择操作:1.入队\t2.出队\t3.退出程序\t选择:");
scanf("%d",&choose);
//fflush(stdin);
if(choose!=1&&choose!=2) break;
switch(choose) //选择操作
{
case 1:
EnQueue(queue); //入队操作
break;
case 2:
DeQueue(queue); //出队操作
break;
default:
printf("\n退出程序!\n");
break;
}
}
system("pause");
}
#include
#include
#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define MAX 100 //栈的最大值 typedef int SElemType;
typedef int QElemType;
typedef struct
{SElemType *base;
SElemType *top;
}SqStack;
typedef struct SqNode
{SElemType data;
SqNode *Link;
}*Sqptr,NODE;
typedef struct
{Sqptr top;
}Stack;
Stack InitStackb() //链式存储实现栈的初始化
{Stack S;
S.top=(Sqptr)malloc(sizeof(NODE));
if(!S.top) exit (OVERFLOW);
S.top->Link=NULL;
return(S);
}
void Pushb(Stack &S,int x) //链式存储实现栈的入栈操作
{Sqptr p;
p=(Sqptr)malloc(sizeof(NODE));
if(!p) return;
p->data=x;
p->Link=S.top->Link;
S.top->Link=p;
}
void Popb(Stack &S) //链式存储实现栈的出栈操作 {int x;
Sqptr p;
if(S.top->Link==NULL) return;
else {p=S.top->Link;
x=p->data;
S.top->Link=p->Link;
printf("\t删除的栈顶元素是%d\n",x);
free(p);}
}
typedef struct
{SElemType *base;
int front,rear;
}SqQueue;
SqQueue InitQueueb() //顺序存储实现队列的初始化 {SqQueue S;
S.base=(SElemType *)malloc(MAX*sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.front=S.rear=0;
return(S);
}
void EnQueueb(SqQueue &S,int x) //顺序存储实现队列的入队
{if((S.rear+1)%MAX==S.front) return;
S.base[S.rear]=x;
S.rear=(S.rear+1)%MAX;
}
void DeQueueb(SqQueue &S) //顺序存储实现队列的出队 {int x;
if(S.front==S.rear) return;
x=S.base[S.front];
S.front=(S.front+1)%MAX;
printf("\t删除的队头元素是:%d\n",x); }
void main()
{int choice;
int n,x;
printf("\n\n");
printf("\t1.采用链式存储实现栈的初始化、入栈、出栈操作\n");
printf("\t2.采用顺序存储实现队列的初始化、入队、出队操作\n");
printf("\t请选择:");
scanf("%d",&choice);
switch(choice)
{case 1:Stack Sa;
printf("\t1.链式存储实现栈的初始化\n");
printf("\t2.链式存储实现栈的入栈操作\n");
printf("\t3.链式存储实现栈的出栈操作\n");
while(1){
printf("\t请选择:");
scanf("%d",&n);
switch(n)
{case 1:Sa=InitStackb();
printf("\t链式存储栈的初始化完成!\n");break;
case 2:printf("\t以'0'结束\n");printf("\t");
scanf("%d",&x);
while(x){
Pushb(Sa,x);scanf("%d",&x);}
printf("\t链式存储栈的入栈操作完成!\n");break;
case 3:Popb(Sa);break;}}break;
case 2:SqQueue Sv;
printf("\t1.顺序存储实现队的初始化\n");
printf("\t2.顺序存储实现队的入栈操作\n");
printf("\t3.顺序存储实现队的出栈操作\n");
while(1){
printf("\t请选择:");
scanf("%d",&n);
switch(n)
{case 1:Sv=InitQueueb();
printf("\t链式存储栈的初始化完成!\n");break;
case 2:printf("\t以'0'结束\n");printf("\t");scanf("%d",&x);
while(x){
EnQueueb(Sv,x);scanf("%d",&x);}
printf("\t链式存储栈的入栈操作完成!\n");break;
case 3: DeQueueb(Sv);break;}}break;
}}
五、实验步骤
1. 采用队列的顺序存储结构;
2(用菜单的形式完成队列的建立,出队,入队等基本操作; 3. 采用栈的链式存储结构;
4. 用菜单的形式完成栈的出栈、入栈等基本操作。
六、实验注意事项
1(注意熟悉使用链表的操作;
2(注意测试程序,观察实验结果。
七、实验体会
上完一节数据结构实验课,我对数据结构更加熟悉了,与上课所学到的不同,我觉得在实验课上更能让自己去探索一些课堂上想去做但却无法去验证的一些东西。通过这次数据结构实验课,让我对栈与队列的基本结构有了进一步了解,以及栈队列上一些基本操作的实现。虽然在编程过程中还是出现了很多让人摸不着头脑的奇怪问题,不过通过自己的坚持不懈与动脑思考最终还是解决了编程中的大部分问题,通过本次的实验我觉得自己在课堂上所学到的原来是这样子运用的,加深了我对这门专业课的兴趣。
八、程序调试截图
1.采用链式存储实现栈的初始化、入栈、出栈操作
2.采用顺序存储实现栈的初始化、入栈、出栈操作
3.采用链式存储实现队列的初始化、入队、出队操作
4.采用顺序存储实现队列的初始化、入队、出队操作