栈的顺序存储的实现与操作

来源:互联网 发布:西安交通大学软件学院 编辑:程序博客网 时间:2024/03/29 18:38

栈的顺序存储的实现与操作

顺序栈就像是一个记录了开头和结尾的下标的数组,并且只能在尾部添加和删除结点

示例代码

#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{    char *base;    char *top;    char StackSize;}SeqStack;int InitStack(SeqStack *S);int iSeMPTY(SeqStack *S);int Push(SeqStack *S, char x);int Pop(SeqStack *S, char *x);int GetTop(SeqStack S, char *e);print_S(SeqStack S);int main(void){    char ch;    SeqStack S;    if(!InitStack(&S)){        printf("顺序栈初始化失败!\n");        exit(1);    }    printf("顺序栈初始化成功!\n");    int end = 0;    int ope;    while(!end){        print_hyphen(15); printf("\n");        printf("请输入指令来执行操作\n");        print_hyphen(15); printf("\n");        printf("1、判断栈是否为空\n2、入栈一个元素\n3、出栈一个元素\n4、获取栈顶元素\n5、退出\n");        print_hyphen(15); printf("\n");        printf("输入要使用的功能的序号: ");        scanf("%d", &ope);        switch(ope){            case 1:                if(iSeMPTY(&S))                    printf("栈为空!\n");                else                    printf("栈不为空!\n");                break;            case 2:                printf("请输入要入栈的字符: ");                scanf(" %c", &ch);                Push(&S, ch);                print_S(S);                break;            case 3:                Pop(&S, &ch);                printf("出栈的元素为 %c\n", ch);                print_S(S);                break;            case 4:                GetTop(S, &ch);                printf("栈顶元素为 %c\n", ch);                print_S(S);                break;            case 5:                printf("再见!\n");                end = 1;                break;            default:                printf("无此序号,请重新输入!\n");        }    }    return 0;}int InitStack(SeqStack *S){    S->base = (char *)malloc(STACK_INIT_SIZE*sizeof(char));    if(!S->base)        exit(1);    else{        S->top = S->base;        S->StackSize = STACK_INIT_SIZE;    }    return 1;}int iSeMPTY(SeqStack *S){    if(S->top == S->base)        return 1;    else        return 0;}int Push(SeqStack *S, char x){    if((S->top)-(S->base) == S->StackSize){        S->base = (char *)realloc(S->base, (S->StackSize+STACKINCREMENT)*sizeof(char));        if(S->base == NULL)            return 0;        S->top = S->base+S->StackSize;        S->StackSize = S->StackSize+STACKINCREMENT;    }    *S->top = x;    S->top++;    return 1;}int Pop(SeqStack *S, char *x){    if(S->top == S->base)        return 0;    else{        S->top--;        *x = *S->top;        return 1;    }}int GetTop(SeqStack S, char *e){    if(S.top == S.base)        return 0;    *e = *(S.top-1);    return 1;}print_S(SeqStack S){    if(S.top == S.base-1)        printf("当前栈为空!\n");    printf("当前栈中的元素为:\n");    char *ch = S.top-1;    while(ch != S.base-1){        printf("%c ", *ch);        ch--;    }    printf("\n");}void print_hyphen(int n){    while(n--)        printf("-");}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 散装水泥罐堵了怎么办 自动伞手动收了怎么办 拓麻歌子4u死了怎么办 拓麻歌子mix死了怎么办 彩虹圈线缠住了怎么办 彩虹圈被打搅了怎么办 吃中药吃大蒜了怎么办 呕吐蛋黄哥干了怎么办 鹦鹉的脚受伤了怎么办 内痔疮疼得厉害怎么办 孕妇用了痔疮膏怎么办 痔疮犯了特别疼怎么办 有痔疮肛门很痛怎么办 这几天痔疮犯了怎么办 孕初期肛裂出血怎么办 胃疼怎么办怎么缓解胃 脚踝崴了肿了怎么办 脚扭了脚背肿了怎么办 儿童脚扭伤肿了怎么办 脚关节扭伤肿了怎么办 小孩脚扭伤肿了怎么办 抱小孩腰扭伤了怎么办 跳舞把腰拉伤了怎么办 脚不小心扭伤了怎么办 娱乐之太帅了怎么办txt 走路走多了脚痛怎么办 胃疼怎么办简单按摩法 经常胃疼的厉害怎么办 半夜胃疼的厉害怎么办 吃消炎药伤胃了怎么办 吃药伤胃了胃疼怎么办 宝宝吃药伤胃了怎么办 胃胀胃痛怎么办快速解决方法 半夜2点3点胃疼怎么办 晚上吃多了胃疼怎么办 骨折打石膏后痒怎么办 脚脖子崴了肿了怎么办 喝酒喝的吐血了怎么办 感冒后咳嗽有痰怎么办 嗓子里老是有痰怎么办 物业把水停了怎么办