C语言栈和队列的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
●实验内容:
1.编写函数,采用链式存储实现栈的初始化、入栈、出栈操作。
2.编写函数,采用顺序存储实现栈的初始化、入栈、出栈操作。
3.编写函数,采用链式存储实现队列的初始化、入队、出队操作。
4.编写函数,采用顺序存储实现队列的初始化、入队、出队操作。
5.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
●实验目的及要求:
1.掌握栈、队列的思想及其存储实现
2.掌握栈、队列的常见算法的程序实现
●实验结果:
#include
#include
#define MAXSIZE 80 typedef struct
{int data[80];
int top;
}SeqStack;
typedef struct lnode {int data;
struct lnode *next; }StackNode,*LinkStack;
{int data[80];
int front,rear;
int num;
}C_SeQueue;
typedef struct node
{int data;
struct node *next;
}QNode;
typedef struct
{QNode *front,*rear;
}LQueue;
void menu()
{
printf("\n");
printf("\t* ☆.栈的链式存储| ☆.栈的顺序存储*\n");
printf("\t* 1.初始化| 5.初始化*\n");
printf("\t* 2.判空| 6.判栈空*\n");
printf("\t* 3.入栈| 7.入栈*\n");
printf("\t* 4.出栈| 8.出栈*\n");
printf("\t* ======================================== *\n"); printf("\t* ☆.队列的链式存储| ☆.队列的顺序存储*\n");
printf("\t* 9.初始化| 13.建有头结点队*\n");
printf("\t* 10.判空| 14.判空*\n");
printf("\t* 11.入队| 15.入队*\n");
printf("\t* 12.出队| 16.出队*\n");
printf("\t* 0,退出| *\n"); printf("\t请选择您所需操作的序号:");
}
LinkStack Init_LinkStack()
{
StackNode *L;
L=(StackNode*)malloc(sizeof(StackNode));
L->data=100;
L->next=NULL;
return L;
}
int Empty_LinkStack(LinkStack top)
{
if(top->next==NULL) return 1;
else return 0;}
LinkStack Push_LinkStack(LinkStack top,int x)
{
StackNode *s;
s=(StackNode*)malloc(sizeof(StackNode));
s->data=x;
s->next=top->next;
top->next=s;
return top;
LinkStack Pop_LinkStack(LinkStack top,int *s) {
StackNode *p;
int j=0;
p=top->next;
if(p!=NULL)
{*s=p->data;
top->next=p->next;
free(p);}
return top;
}
SeqStack * init_SeqStack()
{
SeqStack *S;
S=(SeqStack*)malloc(sizeof(SeqStack));
S->top=-1;
return S;
}
int Empty_SeqStack(SeqStack *S)
{
if(S->top==-1) return 1;
else return 0;}
int Push_SeqStack(SeqStack *S,int x)
{
if(S->top==80-1)
{return(0);
}
else
{S->top++;
S->data[S->top]=x;
return(1);
}
}
int Pop_SeqStack(SeqStack *S,int *p)
{
if(Empty_SeqStack(S)==1)
{ return 0;
}
else
{*p=S->data[S->top];
S->top--;
return 1;}
}
C_SeQueue *init_SeQueue()
{
C_SeQueue *q;
q=(C_SeQueue*)malloc(sizeof(C_SeQueue));
q->front=q->rear=80-1;