实验报告-栈和队列的基本操作

时间:2024.3.31

计算机学院实验报告专用纸

实验室:网络实验室                机号:网34            实验日期:20##年4月3日

计算机学院实验报告附页

计算机学院实验报告附页


第二篇:栈和队列的基本操作


/*验四:栈和队列的基本操作

实验内容

1.采用链式存储实现栈的初始化、入栈、出栈操作。

2.采用顺序存储实现栈的初始化、入栈、出栈操作。

3.采用链式存储实现队列的初始化、入队、出队操作。

4.采用顺序存储实现循环队列的初始化、入队、出队操作。

5.在主函数中设计一个简单的菜单,分别测试上述算法。 */

#include "stdio.h"

#include "stdlib.h"

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define ERROR 0

#define OVERFLOW -2

#define OK 1

typedef int SElemType;

typedef int QElemType;

//存储空间初始分配量 //存储空间分配增加量

typedef struct{ //顺序栈的结构

SElemType *base;

SElemType *top;

int stacksize;

}SqStack;

typedef struct SqNode

{

SElemType data;

SqNode *Link;

}*Sqptr,NODE;

typedef struct

{ //链栈的结构单元

Sqptr top; //栈顶指针

}Stack;

int InitStackb(Stack &S) //链式存储实现栈的初始化 {

S.top=(Sqptr)malloc(sizeof(NODE));

if(!S.top) exit (OVERFLOW);

S.top->Link=NULL;

return 1;

}

void Pushb(Stack &S) //链式存储实现栈的入栈操作 {

Sqptr p;

int x;

printf("请输入入栈元素(以0结束):");

scanf("%d",&x);

while(x)

{

p=(Sqptr)malloc(sizeof(NODE));

if(!p) return ;

p->data=x;

p->Link=S.top->Link;

S.top->Link=p;

scanf("%d",&x);

}

}

void Popb(Stack &S) //链式存储实现栈的出栈操作 {

int x;

Sqptr p;

while(S.top->Link)

{

p=S.top->Link;

x=p->data;

S.top->Link=p->Link;

printf("\t删除的栈顶元素是%d\n",x);

free(p);

}

}

int InitStack(SqStack &S) //顺序存储初始化栈 {

S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)

exit(-2);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

void createStack(SqStack &S) //顺序栈元素入栈 {

int a;

printf("请输入入栈元素(以0结束):");

scanf("%d",&a);

while(a)

{

if(S.top-S.base>=S.stacksize)

{

S.base=(SElemType

*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)

exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=a;

scanf("%d",&a);

}

}

void Popa(SqStack &S) //顺序存储实现栈的出栈操作 {

SElemType *p;

int x;

while(S.top-S.base)

{

p=S.top;

x=*--S.top;

printf("删除的栈顶元素是%d\n",x);

}

}

typedef struct QNode

{

QElemType data;

struct QNode *next;

}*QueuePtr,QNode;

typedef struct

{

QueuePtr front;

QueuePtr rear;

}LinkQueue;

int InitQueue(LinkQueue &Q) //链式存储实现队列的初始化 {

} Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); Q.front->next=NULL; return 1;

//链式存储实现队列的入队 void EnQueue(LinkQueue &Q)

{

int x;

QueuePtr p;

} printf("请输入队列元素(以0结束)"); scanf("%d",&x); while(x) { p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW); p->data=x; p->next=NULL; Q.rear->next=p; Q.rear=p; scanf("%d",&x); }

void DeQueue(LinkQueue &Q) //链式存储实现队列的出队 {int x;

QueuePtr p;

while(Q.front!=Q.rear)

{

p=Q.front->next;

x=p->data;

printf("\t删除的队头元素是:%d\n",x);

Q.front->next=p->next;

if(Q.rear==p) Q.rear=Q.front;

free(p);

}

}

typedef struct

{

SElemType *base;

int front,rear;

}SqQueue;

int InitQueueb(SqQueue &S) //顺序存储实现队列的初始化 {

} S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.front=S.rear=0; return 1;

//顺序存储实现队列的入队 void EnQueueb(SqQueue &S)

{

int x;

printf("请输入入队元素(以0结束):");

scanf("%d",&x);

while(x)

{

if((S.rear+1)%STACK_INIT_SIZE==S.front) return; S.base[S.rear]=x;

S.rear=(S.rear+1)%STACK_INIT_SIZE;

scanf("%d",&x);

}

}

void DeQueueb(SqQueue &S) //顺序存储实现队列的出队 {int x;

while(S.front!=S.rear)

{

x=S.base[S.front];

printf("\t删除的队头元素是:%d\n",x);

S.front=(S.front+1)%STACK_INIT_SIZE;

}

}

void main()

{

SqStack La;

int menu;

Stack Lb;

LinkQueue Q;

SqQueue S;

Lb.top=NULL;

La.base=NULL;

La.top=NULL;

do{

printf("1 创建顺序桟\n");

printf("2 顺序栈出栈操作\n");

printf("3 创建链栈\n");

printf("4 链栈出栈操作\n");

printf("5 创建链队列\n"); printf("6 连队的出对操作\n"); printf("7 创建顺序队列\n"); printf("8 顺序队列出对操作\n"); printf("0 退出\n"); printf("\n请输入所选菜单(0-10):"); scanf("%d",&menu); switch(menu) { case 1: InitStack(La); createStack(La); break; case 2: if(La.base==NULL||La.top==NULL) { printf("I am is null,Plase create first\n"); break; } Popa(La); break; case 3: InitStackb(Lb); Pushb(Lb); break; case 4: if(Lb.top==NULL) { printf("这是个空栈,无法执行输出操作\n"); break; } Popb(Lb); break; case 5: InitQueue(Q); EnQueue(Q); break; case 6: DeQueue(Q); break; case 7: InitQueueb(S); EnQueueb(S); break;

} case 8: DeQueueb(S); break; case 0: exit(0); } }while(menu);

更多相关推荐:
栈和队列实验报告

规格为A4纸或A3纸折叠注1实验报告的内容一实验目的二实验原理三实验步骤四实验结果五讨论分析完成指定的思考题和作业题六改进实验建议2各专业可在满足学校对实验教学基本要求的前提下根据专业特点自行设计实验报告的格式...

算法与数据结构栈与队列实验报告

实验二栈和队列实现四则运算实验二栈和队列实现四则运算一实验目的及要求1掌握栈和队列的基本操作建立插入删除查找合并2掌握用栈和队列的储存3熟悉C语言上机编程环境4掌握编译调试程序的方法二实验内容采用栈进行表达式的...

数据结构实验报告 栈和队列

20xx级数据结构实验报告实验名称实验二栈和队列日期20xx年11月15日1实验要求实验目的通过选择下面五个题目之一进行实现掌握如下内容进一步掌握指针模板类异常处理的使用掌握栈的操作的实现方法掌握队列的操作的实...

栈和队列实验报告

栈的顺序表示和实现一实验目的1了解栈和队列的特性2掌握栈的顺序表示和实现3掌握栈的链式表示和实现4掌握队列的顺序表示和实现5掌握队列的链式表示和实现6掌握栈和队列在实际问题中的应用二实验要求1认真阅读和掌握本实...

数据结构栈和队列实验报告

一实验目的和要求1理解栈和队列的特征以及它们之间的差异知道在何时使用那种数据结构2重点掌握在顺序栈上和链栈上实现栈的基本运算算法注意栈满和栈空的条件3重点掌握在顺序队上和链队上实现队列的基本运算算法注意循环队队...

数据结构栈和队列实验报告

数据结构课程实验报告注空间不够可以增加页码

数据结构实验报告——栈和队列

北京邮电大学电信工程学院20xx级数据结构实验报告实验名称实验二栈和队列学生姓名班级班内序号学号日期20xx年11月8日1实验要求a实验目的通过选择下面五个题目之一进行实现掌握如下内容进一步掌握指针模板类异常处...

数据结构栈和队列实验报告

南京工程学院通信工程学院实验报告课程名称数据结构实验项目名称栈队列的设计实验实验学生班级实验学生姓名实验时间20xx0416实验地点信息楼C205实验成绩评定指导教师签字年月日1一实验目的1掌握栈的顺序表示和基...

实验报告实习二 栈和队列应用

实习二栈和队列应用仅仅认识到栈和队列是两种特殊的线性表是远远不够的本次实习的目的在于使读者深入了解栈和队列的特征以便在实际问题背景下灵活运用它们同时还将巩固这两种结构的构造方法停车场管理问题描述设停车场内只有一...

数据结构实验报告 栈和队列

数据结构实验报告计科090909111数据及实验二栈和队列迷宫问题求解一实验目的二掌握栈和队列的顺序存储结构三掌握栈和队列的操作特性四掌握基于顺序栈和链队列的基本操作的实现方法二实验内容1设计数据结构存储迷宫2...

2数据结构-实验报告二(栈和队列及其应用)

实验二栈和队列及其应用一实验目的1掌握栈和队列这两种抽象数据类型的特点并能在相应的应用问题中正确选用它们2熟练掌握栈类型的两种实现方法3熟练掌握循环队列和链队列的基本操作实现算法二实验内容用队列求解迷宫问题问题...

数据结构-实验3 栈和队列

实验实训报告项目名称实验3栈和队列所属课程名称数据结构项目类型实验实训日期20xx10班级学号姓名指导教师浙江财经学院教务处制一实验实训概述实验目的1掌握栈的两种存储实现方法顺序栈和链式栈掌握STL栈的使用方法...

栈和队列实验报告(28篇)