堆栈和队列基本函数

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

一.顺序栈

1.宏定义

#include

#include

#define MAXSIZE ****

#define datatype ****

2.结构体

typedef struct

{

datatype data[MAXSIZE];

int top;

}Seqstack;

3.基本函数

Seqstack *Init_Seqstack()

/*置空栈函数(初始化)1.先决条件:无;2.函数作用:首先建立栈空间,然后初始化栈顶指针,返回栈s的地址*/

{

Seqstack *s;

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

s->top=-1;

return s;

}

int Empty_Seqstack(Seqstack *s)

/*判栈空函数1.先决条件:初始化顺序栈;2.函数作用:判断栈是否为空,空返回1,不空返回0*/ {

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

else return 0;

}

int Push_Seqstack(Seqstack *s,datatype x)

/*入栈函数1.先决条件:初始化顺序栈2.函数作用:将数据x入栈,栈满则不能,成功返回1,因栈满失败返回0*/

{

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

return 0;

s->top=s->top+1;

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

return 1;

}

int Pop_Seqstack(Seqstack *s,datatype *x)

/*出栈函数1.先决条件:初始化顺序栈2.函数作用:从栈中出一个数据,并将其存放到x中,成功返回1,因栈空失败返回0*/

{

if(s->top==-1)

return 0;

*x=s->data[s->top];

s->top--;

return 1;

}

int Top_Seqstack(Seqstack *s,datatype *x)

/*取栈顶元素函数1.先决条件:初始化顺序栈2.函数作用:取栈顶元素,并把其存放到x中,成功返回1,因栈空失败返回0*/

{

if(s->top==-1)

return 0;

*x=s->data[s->top];

return 1;

}

int Printf_Seqstack(Seqstack *s)

/*遍历顺序栈函数1.先决条件:初始化顺序栈2.函数作用:遍历顺序栈,成功返回1*/

{

int i,j=0;

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

{

printf("%d ",s->data[i]);/*因datatype不同而不同*/

j++;

if(j%10==0)

printf("\n");

}

printf("\n");

return 1;

}

int Conversation_Seqstack(int N,int r)

/*数制转换函数(顺序栈)1.先决条件:具有置空栈,入栈,出栈函数2.函数作用:将N转换为r进制的数*/

{

Seqstack *s;

datatype x;

printf("%d转为%d进制的数为:",N,r);/*以后可以删除去*/

s=Init_Seqstack();

do

{

Push_Seqstack(s,N%r);

N=N/r;

}while(N);

while(Pop_Seqstack(s,&x))

{

if(x>=10)/*为了能转为十进制以上的*/

printf("%c",x+55);

else

printf("%d",x);

}

free(s);/*释放顺序栈*/

printf("\n");

return 1;

}

4.主函数

int main()

{

Seqstack *s;

int choice;

datatype x;

do{

printf("****************************************************************\n");

printf("1.置空栈 2.判栈空 3.入栈 4.出栈 5.取栈顶元素 6.遍历7.退出\n");

printf("****************************************************************\n");

printf("请输入选择(1~7):");

scanf("%d",&choice);

getchar();

switch(choice)

{

case 1:s=Init_Seqstack();

if(s)

printf("置空栈成功!\n");break;

case 2:if(Empty_Seqstack(s))

printf("此为空栈.\n");

else

printf("此不为空栈.\n");;break;

case 3:printf("请输入一个整数:");

scanf("%d",&x);

if(Push_Seqstack(s,x))

printf("入栈成功.\n");

else

printf("栈已满,无法入栈.\n");;break;

case 4:if(Pop_Seqstack(s,&x))

相关文档
最新文档