实验三 栈和队列 下载本文

内容发布更新时间 : 2024/5/18 8:34:51星期一 下面是文章的全部内容请认真阅读。

《数据结构》课程实验 实验报告三

第三章 栈和队列的操作

实验题目: 实验三 栈和队列的操作 学号: 11416106 班级:计算机111 姓名: 张婷 指导教师: 游 静 实验完成时间: 2013.4.22 实验成绩:

实验三 栈和队列的操作

一、实验学时 2学时 二、背景知识

1.栈:

(1).入栈和进栈操作只能从栈顶一端进行; (2).LIFO(后进先出);

(3).栈的两种存储定义:顺序栈和链式栈。 2.队列:

(1).入队操作从队尾进行,出队操作从对头进行; (2).FIFO(先进先出);

(3).队列的两种存储定义:顺序队和链队。

三、目的要求

1. 掌握栈的顺序表示和实现。

Typedef struct{ SelemType *base; SelemType *base; Int stacksize; }sqstack;

2. 掌握队列的链式表示和实现以及顺序表示和实现。

链队列:

Typedef struct Qnode{ QelemType data; struct Qnode *next; } Qnode,*Queueptr; Typedef struct{ Queueptr front; Queueptr rear; }linkQueue; 顺序队列:

#define MAXQSIZE 100 Typedef struct{ Qelemtype *base; int front; int rear; }sqQueue;

四、实验内容

1. 顺序栈和循环队列的创建、入栈(队)、出栈(队)等基本操作。 2. 数制转换问题 【问题描述】

十进制数N和其它d进制数的转换是计算机实现计算的基本问题。试编制一段程序满足下列要求:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。 【基本要求】

首先初始化一个顺序栈,通过入栈出栈操作辅助完成数制的转换操作。 五、程序实例:顺序队列的入队和出队操作。

【问题描述】

使有数组创建队列。程序使有选项运行队列的操作,如:输入1表示元素入队,输入2表示元素出队,输入3表示结束程序运行,并且将队列剩余元素输出。 【基本要求】

首先使有数组创建队列,然后编写入队函数和出队函数,最后编写主函数。 【测试数据】

如:输入队列的元素是:[2][3][4][5][6]

取出队列的元素是:[2]

剩余队列的元素是:[3][4][5][6]

【实现提示】

#define MAXQUEUE 10 /* 队列的最大容量 */

int queue[MAXQUEUE]; /* 队列的数组定义 */ int front = -1; /* 队头 */ int rear = -1; /* 队尾 */ /*―――――――――――入队―――――――――――*/ int enqueue(int value) {

if ( rear >= MAXQUEUE ) /* 检查队列是否全满 */ return -1; /* 无法存入 */ rear++; /* 队尾指针前移 */ queue[rear] = value; /* 存入队列 */ }

/*―――――――――――出队―――――――――――*/ int dequeue() {

if ( front == rear ) /* 检查队列是否为空 */ return -1; /* 无法取出 */ front++; /* 队头指针前移 */ return queue[front]; /* 队列取出 */ }

六、实验结果 1、第一题 顺序栈实现 #include

#define ElementType char #define maxsize 40 typedef struct {

ElementType data[maxsize]; int top;

} SqStackTp;

int InitStack(SqStackTp *sq) {

sq->top=0;

return(1); }

int Push(SqStackTp *sq,DataType x) {

if(sq->top== maxsize-1) {

printf(\栈满\}

else{

sq->top++;

sq->data[sq->top]=x; return(1); } }

int Pop(SqStackTp *sq,DataType *x){ if (sq->top==0) {

printf(\下溢\}

else {

*x=sq->data[sq->top]; sq->top--; return(1);} }

int EmptyStack(SqStackTp *sq){ if (sq->top==0) return(1); else return(0); }

/*主函数*/ void main(){ SqStackTp sq; ElementType ch; InitStack(&sq);

for (ch='A';ch<='A'+12;ch++){ Push(&sq,ch); printf(\}

printf(\

while(!EmptyStack(&sq)) {

Pop(&sq,&ch);printf(\}

printf(\

队列的实现

#include #include

#define MAX 5 /* 队列的最大容量 */

/*―――――――――――队列定义―――――――――――*/ Struct queue{ int *base; int front; int rear; };

Typedef struct queue Queue;

/*―――――――――――建队―――――――――――*/ queue* initqueue(Queue *q){

q->base-new int [MAX];

if(!Q->base){

cout<<”建队失败,内存申请不成功”<

q->front=q->rear=0; return q; }

/*―――――――――――入队―――――――――――*/ int enqueue(Queue *q,int value){

q->base[q->rear]=value;

if((q->rear+1)%MAX==q->front){ cout<<”队已满”; return -1; }

q->rear=(q->rear+1)%MAX; return value; }

/*―――――――――――出队―――――――――――*/ int dequeue(Queue *q){

if ( q->front ==q-> rear ) { /* 检查队列是否为空 */ cout<<”队已空”<

} /* 无法取出 */ int x;

x=q->base[(q->front)%=MAX];

q->front++; /* 队头指针前移 */ return x; /* 队列取出 */ }