【数据结构】数据结构C语言的实现(栈)
来源:互联网 发布:程序员对浏览器的 编辑:程序博客网 时间:2024/05/01 11:38
栈
/* * 栈 */#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define INIT_SIZE 20#define INCREMENT_SIZE 5typedef int SElemType;typedef int Status;typedef struct{ SElemType *base; // 栈底指针 指向栈底元素 SElemType *top; // 栈顶指针 指向栈顶元素的下一个位置 int size; // 栈的大小} SqStack;// 初始化栈Status InitStack(SqStack *S){ S->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType)); if (!S->base) exit(OVERFLOW); S->top = S->base; S->size = INIT_SIZE; return OK;}// 销毁栈Status DestroyStack(SqStack *S){ free(S->base); S->base = NULL; S->top = NULL; S->size = 0; return OK;}// 清空栈Status ClearStack(SqStack *S){ S->top = S->base; return OK;}// 判断栈是否为空Status IsEmpty(SqStack S){ if (S.top == S.base) return TRUE; else return FALSE;}// 获取栈的长度int GetLength(SqStack S){ return S.top - S.base;}// 返回栈顶Status GetTop(SqStack S, SElemType *e){ if (S.top > S.base) { *e = *(--S.top); return OK; } else { return ERROR; }}// pushStatus Push(SqStack *S, SElemType e){ if ((S->top - S->base) / sizeof(SElemType) >= S->size) { S->base = (SElemType *)realloc(S->base, (S->size + INCREMENT_SIZE) * sizeof(SElemType)); if (!S->base) exit(ERROR); S->top = S->base + S->size; S->size += INCREMENT_SIZE; } *S->top = e; S->top++; return OK;}// popStatus Pop(SqStack *S, SElemType *e){ if (S->top == S->base) return ERROR; S->top--; *e = *S->top; return OK;}// 访问元素void visit(SElemType e){ printf("%d ", e);}// 遍历栈Status TraverseStack(SqStack S, void (*visit)(SElemType)){ while (S.top > S.base) { visit(*S.base); S.base++; } printf("\n"); return OK;}/* * 主函数测试 */int main(){ SqStack S; if (InitStack(&S)) { SElemType e; int i; printf("init_success\n"); if (IsEmpty(S)) printf("Stack is empty\n"); for (i = 0; i < 10; i++) Push(&S, i); GetTop(S, &e); printf("The first element is %d\n", e); printf("length is %d\n", GetLength(S)); Pop(&S, &e); printf("Pop element is %d\n", e); TraverseStack(S, *visit); Push(&S, 10); printf("Push element is %d\n", 10); TraverseStack(S, *visit); if (DestroyStack(&S)) printf("\ndestroy_success\n"); }}
init_successStack is emptyThe first element is 9length is 10Pop element is 90 1 2 3 4 5 6 7 8 Push element is 100 1 2 3 4 5 6 7 8 10 destroy_success
0 0
- 【数据结构】数据结构C语言的实现(栈)
- 【数据结构】数据结构C语言的实现(线性表)
- 【数据结构】数据结构C语言的实现(单链表)
- 【数据结构】数据结构C语言的实现(队列)
- 【数据结构】数据结构C语言的实现(简单二叉树)
- C语言实现堆栈(栈)的数据结构
- <数据结构>顺序栈的C语言实现
- <数据结构>链栈的C语言实现
- [数据结构]C语言栈的实现
- 数据结构栈的C语言实现
- 数据结构之栈的c语言实现
- [数据结构]栈的C语言简单实现
- 数据结构--顺序栈实现(c语言)
- 数据结构之栈(C语言实现)
- 数据结构之 栈(C语言实现)
- 数据结构C语言实现栈
- 数据结构.栈(C语言实现)
- 数据结构---栈C语言实现
- Java 反转链表的两种方法
- 将一个数组分割成两个两个一组
- Sass学习之路(11)——Sass运算
- 【数据结构】数据结构C语言的实现(单链表)
- 3D游戏引擎技术架构设计
- 【数据结构】数据结构C语言的实现(栈)
- nodejs初始化init
- openGL绘制正方体分别实现简单颜色绘制、纹理绘制、光照绘制
- 【数据结构】数据结构C语言的实现(队列)
- 互联网公司社会招聘Java工程师面试题整理(1)
- 优酷视频下载爬虫
- 【深度学习】windows下安装TensorFlow
- java进阶
- C#命名管道进程通信(一单向)