河南工业大学实验报告_实验一 线性结构(二)——栈和队列的操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

xxxx大学实验报告

课程名称数据结构实验项目实验一线性结构(二)——栈和队列的操作

院系信息学院计类系专业班级计类1501 姓名学号

指导老师日期

批改日期成绩

一实验目的

1.熟练掌握栈的存储结构及相关典型操作。

2.熟练掌握队列的存储结构及相关典型操作。

二实验内容及要求

实验内容:

1.建立链式栈,实现栈的初始化、进栈、出栈等典型操作。

2.建立循环队列,实现队列的初始化、进队、出队等典型操作。

实验要求:

1.键盘输入数据;

2.屏幕输出运行结果。

3.要求记录实验源代码及运行结果。

4.运行环境:VC++6.0

三实验过程及运行结果

1、循环队列

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2

#define MAXQSIZE 100 //最大队列长度

typedef struct

{

int *base; //初始化的动态分配存储空间

int front;

int rear;

}SqQueue;

//初始化队列

int InitQueue(SqQueue Q)

{

Q.base=(int*)malloc(MAXQSIZE*sizeof(int));

if (!Q.base)exit(OVERFLOW); //存储分配失败

Q.front=Q.rear=0;

return OK;

}

//入队操作

int EnQueue(SqQueue Q)

{

int e;

if ((Q.rear+1)%MAXQSIZE==Q.front) //判断队满{

printf("队列已满,不能入队\n");

return ERROR;

}

printf("请输入入队元素:");

scanf("%d",&e);

Q.base[Q.rear]=e; //入队

Q.rear =(Q.rear+1)%MAXQSIZE; //队尾指针后移return OK;

}

//出队操作

int DeQueue(SqQueue Q)

{

int e;

if(Q.front==Q.rear) //判断队空

{

printf("队列已为空\n");

return ERROR;

}

e=Q.base[Q.front]; //队头出队

printf("输出的出队元素为:");

printf("%d\n",e);

Q.front=(Q.front+1)%MAXQSIZE; //队头下表后移return OK;

}

//队列长度

int QueueLength(SqQueue Q)

{

return((Q.rear-Q.front+MAXQSIZE)%MAXQSIZE); }

//队列遍历

int QueueTraverse(SqQueue Q)

{

printf("遍历结果为:");

while (Q.front!=Q.rear)

{

printf("%d ",Q.base[Q.front]);

Q.front=(Q.front+1)%MAXQSIZE;

}

printf ("\n");

return OK;

}

int main()

{

int n;

SqQueue Q;

InitQueue(Q);

printf("*输入1为入队*\n");

printf("*输入2为出队*\n");

printf("*输入3为队列长度*\n");

printf("*输入4为遍历*\n");

printf("*输入0为退出*\n");

printf("*****************\n");

while(scanf("%d",&n),n)

{

switch(n)

{

case 1:EnQueue(Q);break;

case 2:DeQueue(Q);break;

case 3:printf("队列长度为%d\n",QueueLength(Q));break;

case 4:QueueTraverse(Q);break;

}

}

return 0;

}

2、链式栈

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

typedef int SElemType;

typedef struct node

{

SElemType data;

struct node *next;}SLnode,*SLinkList;

typedef struct

{

SLinkList top,base;

int len;

}S_LinkList;

//栈的初始化

Status Creat_S(S_LinkList &S)

{

int n;

SLinkList p,q;

printf("栈的初始化,请输入数据,以-1结束:\n");

S.top=(SLinkList )malloc(sizeof(SLnode));

S.base=(SLinkList )malloc(sizeof(SLnode));

S.top->next=S.base;

q=S.base;

S.len=0;

while(scanf("%d",&n),n!=-1)

{

p=(SLinkList )malloc(sizeof(SLnode));

p->data=n;

S.top->next=p; p->next=q;

q=p;

S.len++;

}

q=S.top->next;

while(q!=S.base)

{

printf("%d\n",q->data);

q=q->next;

}

printf("*****\n");

return OK;

}

//进栈

Status Push_S(S_LinkList &S)

{

相关文档
最新文档