教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教学研究 >

栈的操作(实验报告)(2)

来源:网络收集 时间:2026-04-01
导读: 栈的基本操作,附带源程序 }break; case 2: {printf(输入将要压入链栈的数据的个数:n=); scanf(%d,n); printf(依次将%d个数据压入链栈:\n,n); for(i=1;i=n;i++) {scanf(%d,a); pushLstack(s,a); } Disp(s); }break

栈的基本操作,附带源程序

}break;

case 2:

{printf("输入将要压入链栈的数据的个数:n=");

scanf("%d",&n);

printf("依次将%d个数据压入链栈:\n",n);

for(i=1;i<=n;i++)

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

pushLstack(s,a);

}

Disp(s);

}break;

case 3:

{ printf("\n出栈操作开始!\n");

printf("输入将要出栈的数据个数:m=");

scanf("%d",&m);

for(i=1;i<=m;i++)

{printf("\n第%d次出栈的数据是:%d",i,popLstack(s));}

Disp(s);

}break;

case 4:

{ printf("\n\n链栈的栈顶元素为:%d\n",StackTop(s));

printf("\n");

}break;

case 5:

{ setEmpty(s);

Disp(s);

}break;

case 6:

exit(0);

}

}while (cord<=6);

}

[实验3] 队列的顺序表示和实现

实验内容与要求

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

(1)初始化队列

(2)建立顺序队列

(3)入队

(4)出队

(5)判断队列是否为空

(6)取队头元素

栈的基本操作,附带源程序

(7)遍历队列

分析:

队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。

入队时,将新元素插入rear所指的位置,然后将rear加1。出队时,删去front所指的元素,然后将front加1并返回被删元素。

顺序队列中的溢出现象:

(1) "下溢"现象。当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。

(2) "真上溢"现象。当队列满时,做进栈运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。

(3) "假上溢"现象。由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为"假上溢"现象。

注意:

(1)当头尾指针相等时,队列为空。

(2)在非空队列里,队头指针始终指向队头元素,尾指针始终指向队尾元素的下一位置。

参考程序:

#include <stdio.h>

#include <malloc.h>

#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) return 0;

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

return x;

}

/*判断队列是否为空*/

int Empty(sqqueue *q)

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

return FALSE;

}

/*取队头元素*/

int gethead(sqqueue *q)

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

return(q->queue[q->front+1]);

}

/*遍历队列*/

void display(sqqueue *q)

{ int s;

s=q->front;

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

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

else

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

while(s<q->rear)

{s=s+1;

printf("%d<-", q->queue[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<n;i++)

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

append(q,m);}

}

栈的基本操作,附带源程序

main()

{ sqqueue *head;

int x,y,z,select;

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

do{printf("\n第一次使用请初始化!\n");

printf("\n请选择操作(1--7):\n");

printf("===================================\n");

printf("1 初始化\n");

printf("2 建立顺序队列\n");

printf("3 入队\n");

printf("4 出队 \n");

printf("5 判断队列是否为空\n");

printf("6 取队头元素 \n");

printf("7 遍历队列\n");

printf("===================================\n");

scanf("%d",&select);

switch(select)

{case 1:

{ initQueue(head);

printf("已经初始化顺序队列!\n");

break;

}

case 2:

{ Setsqqueue(head);

printf("\n已经建立队列!\n");

display(head);

break;

}

case 3:

{ printf("请输入队的值:\n ");

scanf("%d",&x);

append(head,x);

display(head);

break;

}

case 4:

{ z=Delete(head);

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

display(head);

break;

}

case 5:

{ if(Empty(head))

printf("队列空\n");

栈的基本操作,附带源程序

else

printf("队列非空\n");

break;

}

case 6:

{ y=gethead(head);

printf("队头元素为:%d\n",y);

break;

}

case 7:

{ display(head);

break;

}

}

}while(select<=7);

}

[实验4[ 队列的链式表示和实现

实验内容与要求:

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

(1)初始化并建立链队列

(2)入链队列

(3)出链队列

(4)遍历链队列

分析:

队列的链式存储结构简称为链队列。 …… 此处隐藏:2669字,全部文档内容请下载后查看。喜欢就下载吧 ……

栈的操作(实验报告)(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/50103.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)