//函数声明: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define STACK_INIT_MEMORY 100 #define STACK_GROW_MEMORY 10 typedef int ElemType; typedef struct stack { ElemType *esp; ElemType *ebp; int size; //记录当前栈内空间最多能存几个元素 }stack; //函数实现: void creatstack(stack *S) { S->ebp = (ElemType *)malloc(sizeof(ElemType)* STACK_INIT_MEMORY); if (S->ebp == NULL) //判断动态内存是否开辟成功 exit(1); S->size = STACK_INIT_MEMORY; S->esp = S->ebp; } int push(stack *S, ElemType x) { if (S->esp - S->ebp >= S->size) //判断当前栈是否已满 { //栈满追加空间 S->ebp = (ElemType *)realloc(S->ebp, sizeof(ElemType)*(S->size + STACK_GROW_MEMORY)); if (S->ebp == NULL) exit(1); S->esp = S->ebp + S->size; //让栈顶指针向后偏移指向要入栈的位置 S->size += STACK_GROW_MEMORY; } *S->esp++ = x; return 1; } int pop(stack *S, ElemType *x) { if (S->esp == S->ebp) return 0; else { *x = *--S->esp; return 1; } } int getesp(stack *S, ElemType *x) { if (S->esp == S->ebp) return 0; else { *x = *(S->esp - 1); return 1; } } int stacklength(stack *S) { return S->esp - S->ebp; } void destorystack(stack *S) { if (S->ebp != NULL) //销毁栈 free(S->ebp); } //函数测试: #include"stack.h" int main() { printf("************************************\n"); printf("*0.exit 1.creatstack *\n"); printf("*2.push 3.pop *\n"); printf("*4.getesp 5.stacklength *\n\n\n"); stack ret; ret.ebp = NULL; ElemType x; int n = 0; while (1) { printf("请选择功能:"); scanf("%d", &n); switch (n) { case 0: destorystack(&ret); exit(1); break; case 1: if (ret.ebp != NULL) { destorystack(&ret); //如果当前已经创建了一个栈,则先销毁在创建 } creatstack(&ret); printf("创建成功\n"); break; case 2: printf("请输入入栈元素:"); scanf("%d", &x); push(&ret, x); printf("入栈成功\n"); break; case 3: if (pop(&ret, &x) == 0) printf("栈是空栈!\n"); else printf("弹出成功,弹出元素:%d\n", x); break; case 4: if (getesp(&ret,&x) == 0) printf("栈是空栈!\n"); else printf("栈顶元素:%d\n",x); break; case 5: printf("栈的长度:%d\n", stacklength(&ret)); break; default: printf("选择无效\n"); break; } } system("pause"); return 0; }
线性结构——栈
原创
©著作权归作者所有:来自51CTO博客作者我是你帆哥的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:蛇形数组和“之”字形打印
下一篇:指针二三事
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】详细剖析线性表
【数据结构】第二章——线性表(9)总结了线性表的基本知识点,并对循序表与链表进行了比较
数据结构 C语言 线性表 顺序表 链表 -
数据结构 线性结构篇——栈和队列
文章目录一、栈1.1 什么是栈1.2 栈的应用1.2.1 无处不在的撤销(undo)操作1.2.1 计算机程序调用的系统栈1.3 栈的
动态数组 栈 队列 循环队列 时间复杂度 -
(C语言)栈的线性结构实现(数据结构八)
1.数据类型定义在代码中为了清楚的表示一些错误和函数运行状态,我们预先定义一些变量来表示这些状态。在head.h头文件中有
c 栈 数据结构 #define Stack -
Java数据结构与算法:线性数据结构之栈
栈作为一种简单而强大的数据结构,有着广泛的应用场景。通过学习栈的基本概念和操作,我们可以更好地理解和应用这一数据结构。
java 数据结构 开发语言 Stack 出栈