顺序栈与链队列C语言实验报告,栈与队列的顺序表示和实现实验报告.doc

姓名刘茂 学号222012315220062

实验项目栈与队列的顺序表示和实现实验报告实验内容编写一个程序实现顺序栈和顺序队列的各种基本运算,并完成以下操作:

初始化顺序队列;

建立顺序队列;

入队;

出队;

判断队列是否为空;

取队头元素;

遍历队列;

初始化顺序栈;

插入元素;

删除栈顶元素;

取栈顶元素;

遍历顺序栈;

13、置空顺序栈;算法设计与程序实现:算法分析 1、对于顺序栈和顺序队列,都是采用一组地址连续的存储单元一次存放自栈底到栈顶或从队列头到队列尾的数据元素。

2、对于栈,设栈顶指针为top,栈底指针为base。用top=0或top=base表示栈空。对于队列,设指针front为队列头指针,设指针rear表示队列尾指针。用front=rear=0表示空队列。

3、初始化栈和队列时,令top=0或front=rear=0,将栈或队列置空。

4、每入栈一个数据元素,指针top增加1,出栈时,指针top减小1。每当插入新的队尾数据元素时,指针rear增加1,每当删除一个队头数据元素时,指针front减小1。核心程序//顺序队列

#include

#include

#include

#define MAXNUM 100

#define ElemType int

#define TRUE 1

#define FALSE 0

//定义队列的顺序存储结构

typedef struct

{

ElemType queue[MAXNUM];

int front;

int rear;

}sqqueue;

//初始化顺序队列

int initQueue(sqqueue *q)

{

if(!q)return FALSE;

q->front=-1;

q->rear=-1;

return TRUE;

}

//入队

int append(sqqueue *q,ElemType x)

{if(q->rear>=MAXNUM-1)return FALSE

{q->rear++;

q->queue[q->rear]=x;

return TRUE;

}

//出队

ElemType Delete(sqqueue *q)

{ElemType x;

if(q->front==q->rear)

{printf("队列空!\n");return 0;}

x=q->queue[++q->front];

printf("队头元素%d出队!\n",x);

return x;

}

//判断队列是否为空

int Empty(sqqueue *q)

{if(q->front==q->rear)return TRUE;

return FALSE;}

//获取队头元素

int gethead(sqqueue *q)

{ElemType x;

if(q->front==q->rear)

{printf("队列空!\n");return 0;}

x=q->queue[q->front+1];printf("\n队头元素:%d出队\n",x);

return x;

}

//遍历队

void display(sqqueue *q)

{int s;

s=q->front;

if(q->front==q->rear)

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

else

{printf("\n顺序队列依次为:");

while(srear)

{s=s+1;

printf("%dqueue[s]);

}

printf("\n");

printf("顺序队列队尾元素所在位置为:rear=%d\n,q->rear);

printf("书序队列队头元素所在位置为:front=%d\n,q->front);

}}

//建立顺序队列

void Setsqqueue(sqqueue *q)

{int n,i,m;

printf("\n请输入顺序队列的长度:");

scanf("%d",&n);

printf("\n请依次输入顺序队列的元素值:\n");

for(i=0;i

{scanf("%d",&m);

append(q,m);}

}

//主函数

void main()

{sqqueue *head;

int x,select;

head=(squeue*)malloc(sizeof(squeue));

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

do{

printf("

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值