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