栈和队列上机实现作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
上机实验报告
实验三栈和队列算法的上机实现
班级:
姓名:
学号:
实验三栈和队列算法的上机实现一、实验目的:
⒈理解栈(先进后出)和队列(先进先出)的工作特点;
⒉掌握栈的顺序和链式存储结构,学会进行结构定义,以及在顺
序和链式存储结构下有关栈的基本操作:入栈、出栈、栈空、栈满等;
3.掌握循环队列的顺序存储结构及队列的链式存储结构,学会进行结构定义,以及在顺序和链式存储结构下有关队列的基本操作:入队列、出队列、队列空、队列满等;
4.应用栈和队列解决实际的问题。
二、实验内容:
⒈顺序栈的基本运算
⒉循环队列基本运算
3.元素逆置算法的实现
三、实验步骤及结果:
⒈顺序栈的基本运算
程序算法:
#include"stdio.h"
#include"stdlib.h"
#define MAXSIZE 20
typedef struct
{
char data[MAXSIZE]; //栈中元素存储空间
int top; //栈顶指针}seqstack;
//顺序栈类型
void init_seqstack(seqstack **s) //顺序栈初始化
{
*s=(seqstack*)malloc(sizeof(seqstack));
//在主调函数中申请栈空间
(*s)->top=-1; //置栈空标志}
int empty_seqstack(seqstack *s) //判栈是否为空{
if(s->top=-1) //栈为空时
return 1;
else
return 0;
}
void push_seqstack(seqstack *s,char x)//顺序栈元素入栈{
if(s->top==MAXSIZE-1)
printf("栈已满!\n"); //栈已满else
{s->top++;
s->data[s->top]=x; //将元素x压入栈*s中
}
}
void pop_seqstack(seqstack *s,char *x) //将栈*s中的栈顶元素出栈并通过参数x返回给主调函数
{
if(s->top==-1)
printf("栈为空!\n"); //栈为空
else
{
*x=s->data[s->top]; //栈顶元素出栈
s->top--;
}
}
void top_seqstack(seqstack *s,char *x) //取顺序栈栈顶元素
{
if(s->top==-1)
printf("栈为空!\n"); //栈为空
else
*x=s->data[s->top]; //取栈顶元素值
}
void print(seqstack *s) //顺序栈输出
{
int i;
for(i=0;i<=s->top;i++)
printf("%4c",s->data[i]);
printf("\n");
}
void main()
{
seqstack *s;
char x,*y=&x; //y是指向x的指针,出栈元素经过y传给变量x
init_seqstack(&s); //顺序栈初始化
if(empty_seqstack(s)) //判栈是否为空
printf("栈为空!\n");
printf("入栈元素的值为:!\n"); //顺序栈元素入栈
scanf("%c",&x);
while(x!='\n')
{
push_seqstack(s,x);
scanf("%c",&x);
}
printf("输出栈的元素:\n");
print(s); //输出顺序栈中元素
pop_seqstack(s,y); //顺序栈元素出栈
printf("出栈的元素为:%c\n",*y); //输出出栈元素printf("出栈后顺序栈中的元素:\n");
print(s); //输出出栈后顺序栈中的元素top_seqstack(s,y); //读取顺序栈栈顶元素
printf("栈顶的元素值为:%c\n",*y); //输出读出的栈顶元素
printf("当前栈中的元素:\n");
print(s); //输出当前的顺序栈中的元素
}
在VS2010上的实现:
程序运行后的结果(输入的值为:abcdefghijklmn):
⒉循环队列基本运算
程序算法:
#include"stdio.h"
#include"stdlib.h"
#define MAXSIZE 20
typedef struct
{
char data[MAXSIZE]; //队中元素存储空间
int rear,front; //队尾和队头指针
}sequeue; //顺序队列类型
void int_sequeue(sequeue **q) //循环队列初始化(置空队){
*q=(sequeue*)malloc(sizeof(sequeue));
//生成循环队列的存储空间
(*q)->front=0;
//队头和队尾指针相等则队为空
(*q)->rear=0;
}
int empty_sequeue(sequeue *q) //判队空{
if(q->front==q->rear)
return 1; //队空
else
return 0; //队不空
}
void in_sequeue(sequeue *q,char x) //元素入队{
if((q->rear+1)%MAXSIZE==q->front)
printf("队满!\n"); //队满,入队失败else
{
q->rear=(q->rear+1)%MAXSIZE; //队尾指针加1
q->data[q->rear]=x; //将元素x入队
}
}
void out_sequeue(sequeue *q,char *x) //元素出队
{
if(q->front==q->rear)
printf("队空!\n"); //队空,出队失败else
{
q->front=(q->front+1)%MAXSIZE; //队头指针加1