数据结构之栈的c语言实现
来源:互联网 发布:i mean it 编辑:程序博客网 时间:2024/04/25 17:30
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 20 //栈的初始化容量#define STACK_INCREMENT_SIZE 10 //栈满时追加栈的容量#define OK 1#define ERROR 0;typedef int ElemType;typedef int Status;typedef struct {ElemType *top; //栈顶指针ElemType *base; //栈底指针ElemType size; //栈的容量}SqStack;//初始化栈SqStack* InitStack(){SqStack *s = (SqStack *)malloc(sizeof(SqStack));if (!s)exit(0);s->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);if (!s->base)exit(0);s->top = s->base;s->size = STACK_INIT_SIZE;return s;}//进栈Status Push(SqStack *s, ElemType n){if (s->top - s->base >= s->size){//栈满,需要申请更大空间s->base = (ElemType*)realloc(s->base, (s->size + STACK_INCREMENT_SIZE) * sizeof(ElemType));if (!s->base){printf("Stack increment size error!\n");return ERROR;}s->top = s->base + s->size; //修改栈顶指针s->size += STACK_INCREMENT_SIZE; //修改栈的存储大小printf("stack increment\n");}*(s->top) = n;(s->top)++;printf("push data %d in stack success\n", n);return OK;}//从栈底到栈顶依次访问元素Status StackTraverse(SqStack *s){printf("stack从下到上的数据为: \n");ElemType *p = s->base;while (p != s->top)printf("%d ", *p++);printf("\n");return OK;}//栈顶元素出栈ElemType Pop(SqStack *s){if (s->base == s->top) { //栈为空printf("stack is empty!\n");exit(0);}else{(s->top)--;return *(s->top);}}//访问栈顶元素ElemType GetTop(SqStack *s){if (s->top == s->base) { //栈为空printf("stack is empty!\n");exit(0);}else return *(s->top - 1);}int main(){SqStack* s = InitStack();int i;for (i = 0; i < 25; i++){Push(s, i * 2);}StackTraverse(s);printf("get stack top: %d\n", GetTop(s));ElemType e = Pop(s);printf("pop stack: %d\n", e);StackTraverse(s);free(s);return 0;}
执行结果:
0 0
- 数据结构之栈的c语言实现
- 数据结构之队列的实现(c语言)
- C语言实现的数据结构之------哈希表
- 数据结构之单链表的C语言实现
- 数据结构之双链表的C语言实现
- 数据结构C语言之栈的简单实现
- 数据结构 学习笔记之:顺序栈的C语言实现
- 数据结构之---c语言实现栈的顺序存储
- C语言学习之数据结构栈的实现
- C语言实现数据结构之栈的详解
- 数据结构C语言实现之顺序栈
- 数据结构C语言实现之链栈
- 数据结构之---C语言实现共享栈
- 数据结构之栈(C语言实现)
- 数据结构之 栈(C语言实现)
- C语言实现堆栈(栈)的数据结构
- <数据结构>顺序栈的C语言实现
- <数据结构>链栈的C语言实现
- [Leetcode]3Sum
- Jquery弹出层(纯CSS打造),有滚动条时位置不准确
- Xcode 7.1 中安装 Alcatraz 失败最全的解决方案
- SQL学习笔记--创建表、约束、修改表
- shell awk 入门
- 数据结构之栈的c语言实现
- C++11中auto、decltype等关键字不能在codeblacks的GNU编译器识别通过的问题的解决
- Null value was assigned to a property of primitive type setter of 的原因与解决方案
- opencv调节图像色相、饱和度、明度(H\S\V)
- vpn618错误,vpn配置正确无法连接
- makefile 中$^、$@、$<分别代表什么意思?
- What’s The Deal With The Git Index?
- 【Java并发编程】:线程间通信中notify通知的遗漏(含代码)
- ios apple企业账号申请流程