当前位置:文档之家› 栈的顺序表示和实现

栈的顺序表示和实现

(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 <MAXNUM-1)
{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<i)
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)
printf("!");
for(i=q->top;i>=0;i--)
printf("%6d",q->stack[i]);
}break;
case 7:
{
q=(SqStack * )malloc(sizeof(SqStack));
int s;
InitStack(q);
printf("请输入要判断的正数:\n");
scanf("%d",&y);
s=huiwen(q,y);
if(s==1)
printf("%d是回文数!",y);
else
printf("%d不是回文数!",y);
}break;
case 8:
exit(0);
}
}while(cord<=8);
}。

相关主题