栈和队列上机实现作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档