数据结构栈和队列(参考代码)

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

相关文档
最新文档