第三章 栈和队列---数据结构基本实验算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验1 实现顺序栈各种基本运算的算法

#include<stdio.h>

#include<malloc.h>

#define MaxSize 100

typedefchar ElemType;

typedefstruct

{

ElemTypedata[MaxSize];

int top; //栈指针

}SqStack;

void InitStack(SqStack *&s)//初始化栈s

{

s=(SqStack *)malloc(sizeof(SqStack));

s->top=-1;

}

void ClearStack(SqStack *&s)//释放栈s

{

free(s);

}

int StackLength(SqStack *s)//求栈s的长度

{

return(s->top+1);

}

int StackEmpty(SqStack *s)//判断栈s是否为空栈{

return(s->top==-1);

}

int Push(SqStack *&s,ElemTypee)//进栈一个元素{

if(s->top==MaxSize-1)

return 0;

s->top++;

s->data[s->top]=e;

return 1;

}

int Pop(SqStack *&s,ElemType&e)//出栈一个元素{

if(s->top==-1)

return 0;

e=s->data[s->top];

s->top--;

return 1;

}

int GetTop(SqStack *s,ElemType&e)//取栈顶元素

{

if(s->top==-1)

return 0;

e=s->data[s->top];

return 1;

}

void DispStack(SqStack *s)//从栈顶到栈底输出元素

{

int i;

for(i=s->top;i>=0;i--)

printf("%c",s->data[i]);

printf("\n");

}

//主程序

void main()

{

ElemTypee;

SqStack *s;

printf("(1)初始化栈s\n");

InitStack(s);

printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));

printf("(3)依次进栈元素a,b,c,d,e\n");

Push(s,'a');

Push(s,'b');

Push(s,'c');

Push(s,'d');

Push(s,'e');

printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));

printf("(5)栈长度:%d\n",StackLength(s));

printf("(6)从栈顶到栈底元素:");DispStack(s);

printf("(7)出栈序列:");

while(!StackEmpty(s))

{

Pop(s,e);

printf("%c",e);

}

printf("\n");

printf("(8)栈为%s\n",(StackEmpty(s)?"空":"非空"));

printf("(9)释放栈\n");

ClearStack(s);

}

/////////////////////////////////////////////////////////////////////实验 2 实现链栈各种基本运算的算法

#include<stdio.h>

#include<malloc.h>

typedefchar ElemType;

typedefstruct linknode

{

ElemTypedata; //数据域

struct linknode *next;//指针域

}LiStack;

void InitStack(LiStack *&s)

{

s=(LiStack *)malloc(sizeof(LiStack));

s->next=NULL;

}

void ClearStack(LiStack *&s)

{

LiStack *p=s->next;

while(p!=NULL)

{

free(s);

s=p;

p=p->next;

}

}

int StackLength(LiStack *s)

{

int i=0;

LiStack *p;

p=s->next;

while(p!=NULL)

{

i++;

p=p->next;

}

return(i);

}

int StackEmpty(LiStack *s)

{

return(s->next==NULL);

}

void Push(LiStack *&s,ElemTypee)

{

LiStack *p;

p=(LiStack *)malloc(sizeof(LiStack));

p->data=e;

p->next=s->next; //插入*p节点作为第一个数据节点

相关文档
最新文档