C语言数据结构——栈

来源:互联网 发布:去除数组重复元素js 编辑:程序博客网 时间:2024/05/29 18:33

  数据结构的一些讲解,供学习者参考,也顺带作为复习

  栈是限制在表的一端进行插入和删除的线性表,允许插入、删除的一段成为栈顶,另一个固定端称为栈底,当表中没有元素时称为空栈。如图所示的栈中有3个元素,进栈的顺序是a1、a2、a3,当需要出栈时其顺序为a3、a2、a1,所以栈又称为后进先出的线性表(Last In First Out),简称LIFO表。
  CSDN
  
  
初始置空栈算法

SeqStack *Init_SeqStack(){    SeqStack *s;    s=(SeqStack *)malloc(sizeof(SeqStack));//申请栈空间    s->top=-1;//初始化栈顶指针    return s;}

判断是否为空栈

int Empty_SeqStack(SeqStack *s){    if(s->top==-1)        return 1;    else         return 0;}

入栈算法

int Push_SeqStack(SeqStack *s,int x){    if(s->top==MAXSIZE-1)//栈满不能入栈    {        printf("栈满不能入栈\n");        return 0;    }    else     {        s->top++;        s->data[s->top]=x;        return (printf("入栈成功!\n"));    }}

出栈

int Pop_SeqStack(SeqStack *s,int *x){    if(Empty_SeqStack(s))//栈空不能出栈        return 0;    else    {        *x=s->data[s->top];//栈顶元素存入*x,返回        s->top--;//更新栈顶指针        return 1;    }}

取栈顶元素

int Top_SeqStack(SeqStack *s,int *x){    if(Empty_SeqStack(s))//栈空无元素        return 0;    else    {        *x=s->data[s->top];        return 1;    }}

输出栈内所有元素

int Out_SeqStack(SeqStack *s){    int i=s->top;    if(Empty_SeqStack(s))        return 0;    while(s->top>-1)    {        printf("%3d",s->data[s->top]);        s->top--;    }    s->top=i;    return 1;}

主函数实现

void main(){    int model,item,flag;    SeqStack *seqstack=NULL;    seqstack=Init_SeqStack();    while(1)    {        printf("请选择\n【1】入栈\n【2】出栈\n【3】取栈顶元素\n【4】输出栈内所有元素\n【5】退出程序\n");        printf("请输入:  ");        scanf("%d",&model);        switch(model)        {            case 1:                while(1)                {                    printf("请输入插入的值('0'代表输入结束):  ");                    scanf("%d",&item);                    if(item==0)                        break;                    if(!Push_SeqStack(seqstack,item))                        break;                }                break;            case 2:                Pop_SeqStack(seqstack,&flag);                printf("栈顶元素 %d 已成功出栈!\n",flag);                break;            case 3:                Top_SeqStack(seqstack,&flag);                printf("栈顶元素为: %d\n",flag);                break;            case 4:                Out_SeqStack(seqstack);                printf("\n");                break;            case 5:                exit(0);            default :                break;        }    }}

程序执行初始界面

需要源代码的欢迎下载,免积分,共同学习,家下来每天都会分享一篇,持续一个星期
源程序下载请点击此处,欢迎指正

0 0
原创粉丝点击