栈的顺序表示和实现

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

(1)开始界面(2)初始化线性表

3.插入:下面是插入第一个元素的图(3),插入后再一次插入其他元素,最终插完元素,见图(4)

(4)插入最后一个元素(第五个)

5.取栈顶元素,如图(

(5)删除栈顶元素(6)取栈顶元素

6.置空顺序栈,如图(7)

(7)置空顺序表

7. 数值转换(将一个十进制数转换为任意进制)

三进制数2220。

(9)回文数判断a (10)回文数判断b

实验结论:实验成功

八.我对本次实验的总结:

1.通过对该程序的调试和运行,使的对顺序栈的功能及其构成有了进一步的了解。

2.通过多个函数出现在同一个程序中的实现,便于熟悉全局变量和局部变量在程序中

可以重新熟悉函数在编程中的设置方法

void InitStack(SqStack *p)

{if(!p)

printf("内存分配失败!");

p->top =-1;

}

/*入栈*/

void Push(SqStack *p,ElemType x)

{if(p->top

{p->top =p->top+1;

p->stack[p->top]=x;

}

else

printf("Overflow! \n");

}

/*出栈*/

ElemType Pop(SqStack *p)

{ElemType x;

if(p->top>=0)

{ x=p->stack[p->top];

printf("以前的栈顶数据元素%d已经被删除!\n",p->stack[p->top]); p->top=p->top-1;

return(x);

}

else

{printf("Underflow! \n");

return(0);

}

}

/*获取栈顶元素*/

ElemType GetTop(SqStack *p)

{ ElemType x;

if(p->top>=0)

{ x=p->stack[p->top];

printf("\n栈顶元素为:%d\n",x);

return(x);

}

else

{ printf("Underflow! \n");

return(0);

}

}

/*遍历顺序表*/

void OutStack(SqStack *p)

{ int i;

printf("\n");

if(p->top<0)

printf("这是一个空表!");

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

printf("第%d个数据元素是: %6d\n",i,p->stack[i]); }

/*置空顺序表*/

void setEmpty(SqStack *p)

{p->top=-1;}

/* 数值转换*/

void shuzhi(SqStack *p,int n,int x)

{

while(n){

Push(p,n%x);

n=n/x;

}

}

/*判断回文数*/

bool huiwen(SqStack *p,int n){

int i=0,j=0;

int a[MAXNUM];

while(n){

a[i]=n%10;

Push(p,n%10);

n=n/10;

i++;

}

while(p->stack[p->top-j]==a[j]) j++;

if(j

return 0;

else

return 1;

}

/*主函数*/

void main()

{SqStack *q;

int cord,x,n,y;ElemType a;

printf("第一次使用必须初始化!\n");

do{

printf("\n");

printf("\n----------主菜单------------\n");

printf("\n 1 初始化顺序表\n");

printf("\n 2 插入一个元素\n");

printf("\n 3 删除栈顶元素\n");

printf("\n 4 取栈顶元素\n"); printf("\n 5 置空顺序栈\n"); printf("\n 6 数制转换\n"); printf("\n 7 判断回文数\n"); printf("\n 8 结束程序运行\n"); printf("\n----------------------------\n");

printf("请输入您的选择(1,2,3,4,5,6,7)"); scanf("%d",&cord);

printf("\n");

switch(cord)

{case 1:

{q=(SqStack * )malloc(sizeof(SqStack)); InitStack(q);

OutStack(q);

}break;

case 2:

{printf("请输入要插入的数据元素: a=");

scanf("%d",&a);

Push(q,a);

OutStack(q);

}break;

case 3:

{ Pop(q);

OutStack(q);

}break;

case 4:

{ GetTop(q);

OutStack(q);

}break;

case 5:

{ setEmpty(q);

printf("\n顺序栈被置空! \n");

OutStack(q);

}break;

case 6:

{q=(SqStack * )malloc(sizeof(SqStack));

int i;

InitStack(q);

printf("请输入要转换的数制:\n"); scanf("%d",&x);

printf("请输入要转换的数:N=");

scanf("%d",&n);

shuzhi(q,n,x);

if(q->top<0)

相关文档
最新文档