C语言中堆栈是什么意思,如何实现?
导读:这篇文章给大家分享的是C语言中堆栈的相关内容,一些新手可能对于什么是堆栈不是很了解,对此本文有很详细的介绍,对大家学习和理解C语言中堆栈会有一定的帮助,那么接下来感兴趣的朋友就跟随小编一起学习一下吧。 一、何为堆栈? a.堆栈是一种特...
这篇文章给大家分享的是C语言中堆栈的相关内容,一些新手可能对于什么是堆栈不是很了解,对此本文有很详细的介绍,对大家学习和理解C语言中堆栈会有一定的帮助,那么接下来感兴趣的朋友就跟随小编一起学习一下吧。
一、何为堆栈?
a.堆栈是一种特殊的线性表
b.堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其不同点是:线性表允许在任意位置插入和删除数据元素,但堆栈只允许在固定一端进行插入和删除数据元素,所以栈又称为“先进后出”(FILO)或“后进先出”(LIFO)的线性表
c.堆栈中允许进行插入和删除数据元素的一端称为栈顶,另一端称为栈底
d.堆栈的插入操作通常称为进栈或入栈;堆栈的删除操作通常称为出栈或退栈
二、思维导图
三、代码
1、顺序堆栈
#include stdio.h> typedef int DataType; #define MaxStackSize 64 typedef struct { DataType stack[MaxStackSize]; int top; } SeqStack; //初始化 void StackInit(SeqStack *S) { S-> top = 0; } //判断是否栈空 int StackIsEmpty(SeqStack S) { if (S.top = 0) return 0; else return 1; } //入栈 int StackPush(SeqStack *S, DataType x) { if (S-> top > = MaxStackSize) { printf("栈满,无法进栈!!!\n"); return 0; } else { S-> stack[S-> top] = x; S-> top++; return 1; } } //出栈 int StackPop(SeqStack *S, DataType *x) { if (S-> top = 0) { printf("堆栈已空,无法出栈!!!\n"); return 0; } else { S-> top--; *x = S-> stack[S-> top]; return 1; } } //获取栈顶元素 int StackGetTop(SeqStack S, DataType *x) { if (S.top = 0) { printf("堆栈已空!!!\n"); return 0; } else { *x = S.stack[S.top - 1]; return 1; } } int main() { SeqStack myStack; int i, x; StackInit(& myStack); for (i = 0; i 10; i++) StackPush(& myStack, i + 1); StackGetTop(myStack, & x); printf("当前栈顶元素为:%d\n", x); printf("依次出栈:"); while (StackIsEmpty(myStack)) { StackPop(& myStack, & x); printf("%d ", x); } system("pause"); return 0; }
2、链式堆栈
#include stdio.h> #include stdlib.h> typedef int DataType; typedef struct snode { DataType data; struct snode *next; } LSNode; //初始化 void StackInit(LSNode **top) { *top = (LSNode *)malloc(sizeof(LSNode)); (*top)-> next = NULL; } //判断堆栈是否非空 int StackIsEmpty(LSNode *top) { if (top-> next == NULL) return 0; else return 1; } //入栈 void StackPush(LSNode *top, DataType x) { LSNode *p; p = (LSNode *)malloc(sizeof(LSNode)); p-> data = x; p-> next = top-> next; top-> next = p; } //出栈 int StackPop(LSNode *top, DataType *x) { LSNode *p = top-> next; if (p == NULL) { printf("堆栈已空,删除错误!!!\n"); return 0; } top-> next = p-> next; *x = p-> data; free(p); return 1; } //获取栈顶元素 int StackGetTop(LSNode *top, DataType *x) { LSNode *p = top-> next; if (p == NULL) { printf("堆栈已空,取出错误!!!\n"); return 0; } *x = p-> data; return 1; } //释放内存空间 void StackDestroy(LSNode **top) { LSNode *p, *q; p = *top; while (p != NULL) { q = p; p = p-> next; free(q); } *top = NULL; } int main() { int i, x; LSNode *top; StackInit(& top); for (i = 0; i 10; i++) StackPush(top, i + 1); StackGetTop(top, & x); printf("当前栈顶元素为%d\n", x); printf("依次出栈:"); while (StackIsEmpty(top)) { StackPop(top, & x); printf("%4d", x); } StackDestroy(& top); system("pause"); return 0; }
总结
关于C语言中堆栈的内容就介绍到这,上述示例具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多堆栈的内容,大家可以关注其它的相关文章。
文本转载自PHP中文网
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C语言中堆栈是什么意思,如何实现?
本文地址: https://pptw.com/jishu/655323.html