栈的顺序表示和实现

来源:互联网 发布:cnc编程电脑配置 编辑:程序博客网 时间:2024/05/17 10:41
#include <stdio.h>#include <stdlib.h>#define MAX 20typedef  int Elemtype;//必须加上;//定义顺序栈的储存结构typedef struct{    Elemtype stack[MAX];    int top;}SqStack;//初始化void InitStack(SqStack *p){    if(!p)    printf("内存分配失败!");    p->top=-1;}//入栈void Push(SqStack *p,Elemtype x){ if(p->top<MAX-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("这是一个空栈!");    printf("\n");    for(i=p->top;i>=0;i--)     printf("第%d个元素是: %5d\n",i,p->stack[i]);}//z置空栈void setEmtpy(SqStack *p){    p->top=-1;}void main(){    SqStack *q;    int cord;    Elemtype a;    printf("\n第一次使用必须初始化\n");    do{     printf("\n\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---------------------------------\n");     printf("\n请输入你的选择(1.2.3.4.5.6)\n");     scanf("%d",&cord);     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:{                setEmtpy(q);                printf("\n顺序栈已被置空!、\n");                OutStack(q);                }break;         case 6: {                exit(0);                }     }    }while(cord>0&&cord<=6);}
0 0
原创粉丝点击