栈的C语言实现(链表和数组)
来源:互联网 发布:linux下安装gcc编译器 编辑:程序博客网 时间:2024/05/21 22:37
数组栈的实现
stack_array.h
#ifndef _stack_array_h#define EmptyTOS (-1)#define MinStackSize (5)#define TRUE 1#define FALSE 0typedef int ElementType;typedef struct StackArrayNode{ int Capacity; int TopOfStack; ElementType *Array;}StackArrayNode,*Stack;int IsEmpty(Stack S);int IsFull(Stack S);Stack CreatStack(int MaxStackSize);void FreeStack(Stack S);void Push(ElementType x, Stack S);void Pop(Stack S);ElementType Top(Stack S);ElementType TopandPop(Stack S);#endif
stack_array.c
#include <stdio.h>#include <stdlib.h>#include "stack_array.h"int IsEmpty(Stack S){ if(S->TopOfStack == EmptyTOS) return TRUE; else return FALSE;}int IsFull(Stack S){ if(S->TopOfStack == S->Capacity) return TRUE; else return FALSE;}Stack CreatStack(int MaxStackSize){ Stack S; if(MaxStackSize < MinStackSize) printf("Stack is too small\n"); S = (Stack)malloc(sizeof(struct StackArrayNode)); if(S == NULL) exit(FALSE); S->Array = (ElementType *)malloc(sizeof(ElementType)*MaxStackSize); if(S->Array == NULL) exit(FALSE); S->Capacity = MaxStackSize; S->TopOfStack = EmptyTOS;}void FreeStack(Stack S){ if(S != NULL) { free(S->Array); free(S); }}void Push(ElementType x, Stack S){ if(IsFull(S)) printf("Stack is full\n"); else { S->TopOfStack ++; S->Array[S->TopOfStack] = x; }}void Pop(Stack S){ if(IsEmpty(S)) printf("Stack is empty\n"); else { S->TopOfStack --; }}ElementType Top(Stack S){ if(!IsEmpty(S)) return S->Array[S->TopOfStack]; printf("Stack is Empty\n"); return FALSE;}ElementType TopandPop(Stack S){ if(!IsEmpty(S)) return S->Array[S->TopOfStack--]; printf("Stack is Empty\n"); return FALSE;}int main(){ Stack S; S = CreatStack(10); Push(1,S); Push(2,S); Push(4,S); printf("%d\n",Top(S)); Pop(S); printf("%d\n",Top(S)); Pop(S); printf("%d\n",Top(S));}
链表栈的实现
stack.h
#ifndef _Stack_h#define TRUE 1#define FALSE 0typedef int ElementType;typedef struct StackNode{ ElementType data; struct StackNode *next;}StackNode,*Stack;int isEmpty(Stack S);Stack CreateStack(void);void MakeEmpty(Stack S);void Push(ElementType x, Stack S);void Pop(Stack S);ElementType Top(Stack S);#endif /*_Stack_h */
stack.c
#include <stdlib.h>#include <stdio.h>#include "stack.h"int isEmpty(Stack S){ if(S->next == NULL) return TRUE; else return FALSE;}void MakeEmpty(Stack S){ if(S == NULL) printf("fata error"); else { while(!isEmpty(S)) Pop(S); }}Stack CreateStack(void){ Stack S = (Stack)malloc(sizeof(struct StackNode)); if(S == NULL) printf("fata error"); S->next = NULL; MakeEmpty(S); return S;}void DeleteStack(Stack S){ MakeEmpty(S); free(S);}void Push(ElementType x, Stack S){ Stack TmpStack = (Stack)malloc(sizeof(struct StackNode)); if(TmpStack == NULL) printf("fata error"); else { TmpStack->data = x; TmpStack->next = S->next; S->next = TmpStack; }}void Pop(Stack S){ Stack TmpStack; if(isEmpty(S)) printf("Stack is Empty"); else { TmpStack = S->next; S->next = S->next->next; free(TmpStack); }}ElementType Top(Stack S){ if(isEmpty(S)) return FALSE; else return S->next->data;}int main(){ Stack S = CreateStack(); Push(1,S); Push(2,S); Push(4,S); printf("%d\n",Top(S)); Pop(S); printf("%d\n",Top(S)); Pop(S); printf("%d\n",Top(S));}
参考自《数据结构与算法分析》
0 0
- 栈的C语言实现(链表和数组)
- 《数据结构与算法分析》—栈的链表和数组实现(C语言)
- 栈的C语言实现(数组)
- 栈(stack)C语言链表实现&&数组实现
- 数组和链表的归并排序算法实现(C语言)
- 栈的C语言 数组实现
- 数组的实现---C语言
- C语言实现栈(数组)
- 使用数组实现栈(C语言)
- C语言多维数组的存储表示和实现
- 数组的顺序表示和C语言实现
- C语言多维数组的存储表示和实现
- C 语言堆栈的实现,数组版本,链表版本(大师级的代码值得细细品味。)
- C语言二分查找法(指针和数组实现)
- 栈数组实现实现文件C语言
- 数组C语言实现
- C语言用堆和双向链表实现可变长度数组
- C语言------栈的初体验(数组实现)
- 解决安装完MFS找不到mfsmount的问题
- myeclipse在工作中的使用
- 仿饿了么订餐系统源码免费试用
- 破除迷信之:100分的态度!
- CSS实现垂直居中
- 栈的C语言实现(链表和数组)
- 一起来看看手持终端在仓储物流中的应用
- DEFY+/MB526/ME526 BL6 CM7 0508 CM9内核ROM
- C# 调用 js 脚本例子
- Python中条件选择和循环语句使用方法介绍
- 【Android开发-3】认识认识项目文件结构和作用
- 2015-循序渐进,从"小"做起-AspNet MVC4 教学小Case汇总主目录
- 还是A+B(1015)
- cmd命令创建文件文件夹