C语言栈和队列的基本操作
实验内容:
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;
typedef struct
{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(S