数据结构栈和队列(参考代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二栈和队列
以下为部分参考程序:
//采用链式存储实现栈的初始化、入栈、出栈操作。
堆栈在链式存储上的操作包括:
(1) 初始化空栈INITSTACK(top)
(2) 判空栈操作EMPTY(top)
(3) 进栈操作PUSH(top,x)
(4) 出栈操作POP(top)
(5) 取栈顶元素操作GETTOP(top)
(6) 栈置空操作CLEAR(top)
(7) 求当前栈中元素个数的操作CURRENT_SIZE(top)
typedef struct node
{ ElemType data;
struct node *next;
} LinkStack;
⑴置空栈
void InitLinkStack(LinkStack * & s)
{ s=NULL;
}
⑵判栈空
int IsEmptyLinkStack(LinkStack *s )
{ if(s==NULL)
return 1;
else
return 0;
}
⑶入栈/*将元素x插入链栈top的栈顶*/
void PushLinkStack(LinkStack* &s , ElemType x)
{ LinkStack *p;
p=malloc(sizeof(LinkStack)); /*生成新结点*s */
p->data=x;
p->next=s;
s=p;
}
⑷出栈/*删除链栈top的栈顶结点*/
int PopLinkStack (LinkStack* & s, ElemType &x)
{ LinkStack *p;
if(s==NULL)return 0;
x = s->data; /*将栈顶数据存入*x */
p = s; /*保存栈顶结点地址*/
s = s->next; /*删除原栈顶结点*/
free (p); /*释放原栈顶结点*/
return 1; /*返回新栈顶指针*/
}
(5)取栈顶元素
int GetLinkStackTop (LinkStack* s, ElemType &x)
{
if(s==NULL)return 0;
x = s->data; /*将栈顶数据存入*x */
return 1; /*返回新栈顶指针*/
}
//采用顺序存储实现栈的初始化、入栈、出栈操作。
//顺序栈的实现
#include
#include "iostream.h"
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack *S)
{
S->base==(int *)malloc(STACK_INT_SIZE *sizeof(int)); if(!S->base) exit(-2);
S->top=S->base;
S->stacksize=STACK_INT_SIZE;
return 1;
}
int GetTop(SqStack S,int *e)
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack *S,int e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+STACKINCREMENT) *sizeof(int));
if(!S->base) exit(-2);
S->top=S->base+S->stacksize;
}
*S->top++=e;
return 1;
}
int Pop(SqStack *S,int e)
{
if(S->top==S->base) return 0;
e=*--S->top;
return 1;
}
main()
{
int a,b,c;
int *p1,*p2,*p3;
p1=&a;p2=&b;p3=&c;
SqStack *S;
printf("Initialize the stack.\n");
InitStack(S);
Push(S,p1);
Push(S,p2);
Push(S,p3);
GetTop(S,p3);
Pop(S,p3);
}
//采用链式存储实现队列的初始化、入队、出队操作。
#include
#include
typedef struct Point
{
int data;
struct Point *next;
}P;
P* head , * tail;
int len=0;
void queue_push(P* p)
{
len++;