实验内容
1.实现顺序栈各种基本运算的算法,具体操作要求如下:
(1)初始化栈,并判断栈是否为空;
(2)对a,b,c,d,f五个字符元素模拟进栈操作;并判断栈是否为空;
(3)取出栈顶元素;
(4)对a,b,c,d,f五个字符元素做依次出栈操作,并判断栈是否为空;
(5)释放栈。 具体效果如下:
2.实现链队列各种基本运算的算法
(1)初始化队列,并判断队列是否为空;
(2)对1,2,3,4,5五个整数模拟进队列操作;并判断队列是否为空;
(3)对1,2,3,4,5五个整数做依次出队列操作,并判断队列是否为空;
(4)取出队头元素;
设计思路
1.实现顺序栈各种基本运算的算法
(1)首先进行e的自定义类型(char),初始化栈 *s
ElemType e;
SqStack *s;
调用InitStack(SqStack *&s)方法来初始化栈
调用StackEmpty(SqStack *s)方法来判断栈是否为空
(2)调用Push(SqStack *&s,ElemType e)方法来使字符元素逐个进栈
调用StackEmpty(SqStack *s)方法来判断栈是否为空
(3)调用GetTop(SqStack *s,ElemType &e)方法来取出栈顶元素
(4)使用while循环语句,在栈不为空的情况下调用Pop(SqStack *&s,ElemType &e)方法对元素进行逐个出栈操作
(5)调用DestroyStack(SqStack *&s)方法来释放栈。
2.实现链队列各种基本运算的算法
首先进行e的自定义类型(char),初始化栈 *Q
LiQueue *Q;
ElemType e;
(1)调用InitQueue(LiQueue *&q)方法来初始化链队
调用QueueEmpty(LiQueue *q)方法来判断栈是否为空
(2)对1,2,3,4,5五个整数模拟进队列操作;并判断队列是否为空;
调用enQueue(LiQueue *&q,ElemType e)对每一个元素进行进队操作
调用QueueEmpty(LiQueue *q)方法来判断栈是否为空
(3)对1,2,3,4,5五个整数做依次出队列操作,并判断队列是否为空;
使用while循环语句,在链队不为空的情况下调用deQueue(LiQueue *&q,ElemType &e)
方法对元素进行逐个出队操作
(4)调用GetTop(LiQueue *&q,ElemType &e)方法来取出链队头元素
实验代码
#include <iostream>
#include <malloc.h>
#include "liqueue.h"
using namespace std;
int main()
{
LiQueue *Q;
ElemType e;
printf("(1)初始化链队列Q\n");
InitQueue(Q);
printf("%s\n",(QueueEmpty(Q)?"(2)链队为空":"(2)链队为非空"));
printf("(3)依次进队元素1,2,3,4,5;\n");
enQueue(Q,1);
enQueue(Q,2);
enQueue(Q,3);
enQueue(Q,4);
enQueue(Q,5);
printf("%s\n",(QueueEmpty(Q)?"(4)队列为空":"(4)队列为非空"));
GetTop(Q,e);
printf("(5)队头元素为%d\n",e);
printf("(6)依次出队序列为:");
while(!QueueEmpty(Q))
{
deQueue(Q,e);
printf("%d ",e);
}
printf("\n");
printf("%s\n",(QueueEmpty(Q)?"(7)队列为空":"(7)队列为非空"));
printf("(8)释放链队列Q\n");
DestroyQueue(Q);
return 0;
}
bool GetTop(LiQueue *&q,ElemType &e)
{
QNode *t;
if (q->rear==NULL)
return false;
t=q->front; //t指向第一个数据节点
e=t->data;
return true;
}
#include <iostream>
#include "Sqstack.h"
using namespace std;
int main()
{
ElemType e;
SqStack *s;
printf("顺序栈s的基本运算如下:\n");
printf("(1)初始化栈s\n");
InitStack(s);
printf("%s\n",StackEmpty(s)?"(2)栈为空":"(2)栈为非空");
printf("(3)依次进栈元素 a,b,c,d,f\n");
Push(s,'a');
Push(s,'b');
Push(s,'c');
Push(s,'d');
Push(s,'f');
printf("%s\n",StackEmpty(s)?"(4)栈为空":"(4)栈为非空");
GetTop(s,e);
printf("(5)栈顶元素为%c\n",e);
printf("(6)出栈序列:");
while(!StackEmpty(s))
{
Pop(s,e);
printf("%c ",e);
}
printf("\n");
printf("%s\n",StackEmpty(s)?"(7)栈为空":"(7)栈为非空");
printf("(8)释放栈s \n");
DestroyStack(s);
}