数据结构:顺序栈的基本操作
学习Python的推荐顺序是:基础语法-数据结构-面向对象-Web开发-数据分析 #生活技巧# #工作学习技巧# #编程语言学习路径#
采用顺序存储结构的栈称为顺序栈。顺序栈利用一组连续的存储单元存放栈中的元素,存放顺序依次从栈底到栈顶。由于栈中元素之间的存放地址的连续性,在C语言中,同样采用数组实现栈的顺序存储。另外,增加一个栈顶指针top,用于指向顺序栈的栈顶元素。
通常top=0或者top=-1表示栈为空。两者的区别简单概括如下:
top=0表示栈为空时,top指向栈底,所以每次在压栈时,先将数据元素压入栈,再对指针进行++操作,使指针后移;top=-1表示栈为空,压栈时恰恰相反,先对栈顶指针进行++操作,然后再将数据压入栈中,在求栈的长度,(即:栈中元素个数时)只需要返回或打印栈顶指针的值; 而由于top=-1表示栈底时,每次对栈中元素操作时先对栈顶指针进行操作,所以在求栈的长度,即栈中元素个数时,需要返回top+1的值;栈空条件为top == 0 或 top == -1,时栈满条件均为 top = MAXSIZE -1; 顺序栈的基本操作/*源代码*/ #include <stdio.h> #include <Windows.h> #define MAXSIZE 100 typedef int DataType; typedef struct { DataType stack[MAXSIZE]; int top; }SeqStack; /*初始化栈,把栈初始化为空,把栈顶指针置为-1*/ void InitStack(SeqStack * s) { s->top = -1; } /*判空操作,当栈顶指针为top 为-1,栈为空*/ int StackEmpty(SeqStack s) { if (s.top == -1) { return 1; } return 0; } /*入栈操作,栈顶指针top++,然后将data值压入栈中*/ int StackPush(SeqStack* s, DataType data) { if (s->top == MAXSIZE) { printf("栈已满,不能入栈!\n"); return 0; } else { s->top++; s->stack[s->top] = data; return 1; } } /*取栈顶元素,将栈顶元素输出*/ int StackGetTop(SeqStack s) { if (s.top==-1) { printf("栈为空!\n"); return 0; } else { printf("%d\n", s.stack[s.top]); s.top--; } } /*输入要入栈的元素以 -1 作为结束标志*/ void StackInput(SeqStack* s) { int data; scanf_s("%d", &data); while (data != -1) { StackPush(s, data); scanf_s("%d", &data); } } /*打印栈中元素*/ void Display(SeqStack s) { int i; for (i = s.top; i >= 0; i--) { printf("%-3d", s.stack[i]); } printf("\n"); } /*出栈操作,将栈顶指针top-- */ void StackPop(SeqStack* s) { if (s->top==-1) { printf("栈为空!\n"); } else { s->top--; } } /*返回栈的长度,栈的长度就是栈中元素的个数*/ int StackLength(SeqStack s) { s.top + 1; printf("%d\n", s.top + 1); return 0; } /*清空栈,清空栈与初始化栈的操作一样,只需将栈顶指针置-1即可*/ void StackClear(SeqStack* s) { s->top = -1; } int main() { SeqStack s; InitStack(&s); printf("输入入栈元素:\n"); StackInput(&s); printf("栈中元素为:\n"); Display(s); printf("栈顶元素为:\n"); StackGetTop(s); printf("栈中元素个数为:\n"); StackLength(s); printf("退一次栈!\n"); StackPop(&s); printf("栈中元素为:\n"); Display(s); StackClear(&s); system("pause"); return 0; }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132网址:数据结构:顺序栈的基本操作 https://www.yuejiaxmz.com/news/view/537771
相关内容
数据结构之队列数据结构(C语言)线性表的创建、插入、删除等操作
基于栈的推荐系统与个性化服务
数据结构之算法的时间与空间复杂度
栈和队列
当利用大小为n的数组顺序存储一个栈时,假定用top=n表示栈空,则每次向这个栈插
面试官问你:程序=算法+数据结构,能深入讲讲吗?
《数据结构与算法》—— O(3N)=O(N) ?
数据结构之循环队列
《数据结构与算法分析