C语言栈和队列的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档