线性结构栈----动态实现
来源:互联网 发布:dat文件导入数据库 编辑:程序博客网 时间:2024/05/22 12:55
//函数声明:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#define STACK_INIT_MEMORY 100#define STACK_GROW_MEMORY 10typedef 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");elseprintf("弹出成功,弹出元素:%d\n", x);break;case 4:if (getesp(&ret,&x) == 0)printf("栈是空栈!\n");elseprintf("栈顶元素:%d\n",x);break;case 5:printf("栈的长度:%d\n", stacklength(&ret));break;default:printf("选择无效\n");break;}}system("pause");return 0;}
0 0
- 线性结构栈----动态实现
- 线性表的顺序储存结构定义(动态)实现
- 线性结构--->线性表实现
- 线性结构--->栈的顺序存储实现
- 线性结构--->栈的链式存储实现
- 线性表之数组实现栈结构
- 抽象数据类型、线性结构、递归实现:栈
- 线性结构--->单链表实现
- 数据结构-线性结构-线性表及其实现
- C语言实现线性结构创建动态链表的学习心得(一)
- ArrayList,List等非链式线性结构是如何实现动态增长的
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性结构上的动态规划
- 线性结构 栈
- 特殊线性结构--栈
- 线性结构------顺序栈
- PAT-B 1045. 快速排序
- 任意类型排序
- 笔记
- 《Linux驱动》混杂设备与设备节点
- 实时 Java 社区论坛:Sym
- 线性结构栈----动态实现
- on my zsh 安装
- Hello Gradle
- 防抖算法小结
- Java调用DLL
- hive建外表时默认分隔符错误导致行数增加和数据错误
- 梯度下降法
- [HDU 1874] 畅通工程续 spfa 写法
- 快速打开Android虚拟机的方法