当前位置:文档之家› 数据结构实验-栈和队列基本操作

数据结构实验-栈和队列基本操作


{ if(S.top == S.base) return True; else return False; }
void main() { SqSta St; Sta temp; int F=1,ch; int e; printf("本程序用于实现顺序结构的堆栈的操作,可以进行入栈, 出栈,取栈顶元素等操作.\n\n"); InitSta(St); while(F) { printf("请输入需要进行操作的序号:\n\n"); printf("1.显示栈中所有元素 \n"); printf("2.入栈操作 \n"); printf("3.出栈操作 \n"); printf("4.取栈顶元素 \n"); printf("5.退出程序 \n"); scanf("%d",&ch); switch(ch) {
二、实验内容及要求
1. 编写一个程序实现顺序栈的各种基本运算。 2. 实现队列的链式表示和实现。
三、实验设备及软件
计算机、Microsoft Visual C++ 6.0软件
四、设计方案(算法设计) ㈠ 采用的数据结构
本程序栈数据的逻辑结构为线性结构,存储结构为顺序存储;队
列的数据逻辑结构依然为线性结构,存储结构为链式结构。
㈡ 设计的主要思路
1. 初始化顺序栈 2. 插入元素 3. 删除栈顶元素 4. 取栈顶元素 5. 遍历顺序栈 6. 置空顺序栈 7. 初始化并建立链队列 8. 入链队列 9. 出链队列 10. 遍历链队列
㈢ 算法描述 1、栈
Sta InitSta(SqSta &S)//构造一个空栈 Sta DesSta(SqSta &S)//销毁栈 Sta StaDisplay(SqSta &S)//显示栈 回OK;否则返回
Sta temp; printf("本程序用于实现链式结构队列的操作,可以进行入队列、 出队列等操作.\n\n"); InitLQ(LQ); while(F) { printf("请输入需要进行操作的序号:\n\n"); printf("1.显示队列所有元素\n"); printf("2.入队列操作\n"); printf("3.出队列操作\n"); printf("4.求队列的长度\n"); printf("5.退出程序\n"); scanf("%d",&ch); switch(ch) { case 1:DisplayLQ(LQ); break; case 2:printf("提示:请输入要人队的一个整数元素:\n"); scanf("%d",&e); EnLQ(LQ,e);//入队 DisplayLQ(LQ); break; case 3:temp=DeLQ(LQ,e); //出队 if(temp==OK) {
p(SqSta S,Type &e) //若栈不空,则用e返回S的栈顶元素,并返 Error Sta Push(SqSta &S,Type e)
//插入元素e为新的栈顶元素
Pop(SqSta &S,Type &e) //若栈不为空,则删除栈顶元素,用e返回其值,并返回 OK;否则返回Error Sta StaEmp(SqSta S) False。 //若为空栈,则返回True,否则返回
printf("提示:出队一个元素:%d\n\n",e); DisplayLQ(LQ); } else printf("提示:队列为空!\n\n"); break; case 4:len=LQLength(LQ); printf("提示:队列的长度为:%d\n\n",len); break; default:F=0; printf("提示:程序运行结束,按任意键退出!\n\n"); getch(); } } } Sta InitLQ(LQ &Q)//队列初始化 { Q.front=Q.rear=(QueuePtr) malloc(sizeof(QNode)); Q.front->next=NULL; return OK; } Sta DesLQ(LQ &Q)//销毁一个队列 { QueuePtr p; Type e;
return OK; } Sta DesSta(SqSta &S)//销毁栈 { if(S.base) free(S.base); S.top = S.base = NULL; return OK; } Sta StaDisplay(SqSta &S)//显示栈 { Type * p=S.base; int i = 0; if(S.base == S.top){ printf("提示:堆栈已空!\n\n"); return OK; } while( p < S.top) printf("[%d:%d]",++i,*p++); printf("\n\n"); return OK; } Sta GetTop(SqSta S,Type &e) //若栈不空,则用e返回S的栈顶元 素,并返回OK;否则返回Error
} Sta DeLQ(LQ &Q,Type &e)//出队列 { QueuePtr p; if(Q.front==Q.rear) return Error; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; return OK; } Sta DisplayLQ(LQ Q)//显示队列中所有元素 { QueuePtr p; int i=0; p=Q.front->next; if(p==NULL) printf("提示:队列为空!\n\n"); else { while(p) { printf("[%d:%d]",++i,p->data);
} } DesSta(St <conio.h> #include <stdio.h> #include <stdlib.h> #define True 1 #define False 0 #define OK 1 #define Error 0
#define InFea -1 #define OverFlow -2 typedef int Sta; typedef int Type; typedef struct QNode//定义结点结构 { Type data; struct QNode *next; }QNode,*QueuePtr; typedef struct LQ//定义队列结构 { QueuePtr front; QueuePtr rear; }LQ; Sta InitLQ(LQ &); Sta DesLQ(LQ &); int LQLength(LQ &Q); Sta EnLQ(LQ &,Type); Sta DeLQ(LQ &,Type &); Sta DisplayLQ(LQ); void main() { LQ LQ; Type e; int F=1,ch,len; //初始化一个队列 //销毁一个队列 //队列的长度 //将一个元素入队列 //将一个元素出队列 //显示队列中所有元素
五、程序代码 1、栈
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define True 1 #define False 0 #define OK 1 #define Error 0 #define InFea -1 #define OverFlow -2 typedef int Sta; typedef int Type; #define StaSize 100 #define StaInc 10 typedef struct { Type *base; Type *top; int stacksize; } SqSta; Sta InitSta(SqSta &S)//构造一个空栈 { S.base = (Type *) malloc(StaSize*sizeof(Type)); if(!S.base) exit(OverFlow); S.top = S.base; S.stacksize = StaSize;
case 4: temp=GetTop(St,e); //取得栈顶元素 if(temp==Error) printf("提示堆栈已空!\n\n"); else printf("提示:栈顶元素是:%d\n\n",e); break; default: F=0; printf("提示:程序结束,按任意键退出!\n\n"); getch();
while(Q.front!=Q.rear) DeLQ(Q,e); free(Q.front); Q.front=Q.rear=NULL; return OK; } int LQLength(LQ &Q)//队列的长度 { int i=0; QueuePtr p=Q.front; while(p!=Q.rear){ ++i; p=p->next; } return i; } Sta EnLQ(LQ &Q,Type e)//入队列 { QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK;
相关主题