栈的数组实现(C语言版)
来源:互联网 发布:云计算 erp 编辑:程序博客网 时间:2024/04/28 03:30
这次是用数组来实现栈,实现思路和方法都比较简单,就不多解释了,下面直接上代码:
头文件:
#ifndef STACKCURSOR_H_INCLUDED#define STACKCURSOR_H_INCLUDEDtypedef int ElementType;typedef struct StackRecord *Stack;int Isempty(Stack S);int IsFull(Stack S);Stack CreatStack(int MaxElements);void DisposeStack(Stack S);void MakeEmpty(Stack S);void Push(ElementType X,Stack S);ElementType Top(Stack S);void Pop(Stack S);ElementType TopAndPop(Stack S);#endif // STACKCURSOR_H_INCLUDED
实现:
#include "StackCursor.h"#include <stdlib.h>#define EmptyTOS (-1)#define MinStackSize (5)void Error(char * message){}void FatalError(char * message){}struct StackRecord{ int Capacity; int TopOfStack; ElementType * Array;};Stack CreatStack(int MaxElements){ Stack S; if(MaxElements < MinStackSize) Error("Stack size is too Small"); S = malloc( sizeof(struct StackRecord)); if( S == NULL ) FatalError("Out of space!!!"); S->Array = malloc(sizeof(ElementType)*MaxElements); if(S->Array == NULL) FatalError("Out of space!!!"); S->Capacity = MaxElements; MakeEmpty(S); return S;}void DisposeStack(Stack S){ if( S != NULL ) { free(S->Array); free(S); }}int IsEmpty( Stack S ){ return S->TopOfStack == EmptyTOS;}void MakeEmpty( Stack S ){ S->TopOfStack = EmptyTOS;}void Push( ElementType X,Stack S ){ if( IsFull(S) ) Error( "Full stack" ); else S->Array[++S->TopOfStack] = X;}ElementType Top(Stack S){ if(!IsEmpty( S )) return S->Array[S->TopOfStack]; Error("Empty stack"); return 0;}void Pop(Stack S){ if( IsEmpty(S) ) Error("Empty stack"); else S->TopOfStack--;}ElementType TopAndPop(Stack S){ if(!IsEmpty(S)) return S->Array[S->TopOfStack--]; Error("Empty stack"); return 0;}int IsFull(Stack S){ return S->TopOfStack == S->Capacity-1;}int main(){ Stack S = CreatStack(50); int i; for(i = 0;i < 20;i++) Push(i,S); while(!IsEmpty(S)) { printf("%d\n",TopAndPop(S)); } DisposeStack(S);}
注:代码改编自《数据结构与算法:C语言描述》第二版
0 0
- 栈的数组实现(C语言版)
- 栈的实现(C语言版)
- 数组、链表实现栈(C语言版)
- 数组实现队列(C语言版)
- 用数组实现队列(C语言版)
- 顺序栈的实现 C语言版(一)
- 顺序栈的实现 C语言版(二)
- 顺序栈的实现 C语言版(二)
- 栈的链表实现(C语言版)
- 清华大学出版社 数据结构(C语言版)的实现
- 最小堆的实现(C 语言版)
- sms4的简单实现(C语言版)
- 顺序表的实现(C语言版)
- 循环队列的实现(C语言版)
- skiplist的简单实现(c语言版)
- 在严蔚敏《数据结构(C语言版)》中,不能用动态分配的一维数组来实现循环队列
- 单循环链表的实现(C语言版)
- 数据结构之插入排序的实现(C语言版)
- 圣思园面授班课程详情
- 转载 session过期时间
- 【PAT甲级】1034. Head of a Gang (30)
- jsp内置对象及方法详细介绍
- linux系统编程之管道(三):命名管道FIFO和mkfifo函数
- 栈的数组实现(C语言版)
- 推荐一部短片《How TCP/IP works》
- 号码
- 信用卡号验证
- tarjan算法-201509-4 高速公路
- R tutorial 18 - Logistic Regression 逻辑回归 (1)
- java8 lambda表达式(2)
- Hadoop系列之-Hadoop2.7.2的Eclipse插件编译
- codeforces 237 C. Primes on Interval