数据结构---栈(数组实现)
来源:互联网 发布:新数网络 编辑:程序博客网 时间:2024/05/29 03:32
本文用C语言描述栈(数组方法实现),以下是源码:
#include "stack_array.h"PtrToStack CreatStack(uint32_t size){PtrToStack S;if (size < MIN_SIZE){printf("Stack size is too small!\r\n");return NULL;}S = (PtrToStack)malloc(sizeof(StackType));if (S == NULL){printf("Out of space!\r\n");return NULL;}S->Capacity = size;S->TopOfStack = EMPTY_TOS;S->Element = malloc((sizeof(ElementType))*size);if (S->Element == NULL){printf("Out of space!\r\n");return NULL;}return S;}bool DisposeStack(PtrToStack S){if (S != NULL){free(S->Element);free(S);}return true;}bool IsEmpty(PtrToStack S){return (S->TopOfStack <= EMPTY_TOS);}bool IsFull(PtrToStack S){return (S->TopOfStack >= (S->Capacity-1));}bool MakeEmpty(PtrToStack S){S->TopOfStack = EMPTY_TOS;return true;}bool Push(PtrToStack S, ElementType X){if (IsFull(S)){printf("Stack if full!\r\n");return false;}S->TopOfStack += 1;*((S->Element) + (S->TopOfStack)) = X;return true;}ElementType Top(PtrToStack S){ElementType WrongRet;if (IsEmpty(S)){memset(&WrongRet, 0, sizeof(ElementType));return WrongRet;}return *(S->Element + S->TopOfStack);}bool Pop(PtrToStack S){if (IsEmpty(S)){printf("Empty stack!\r\n");return false;}S->TopOfStack--;return true;}ElementType TopAndPop(PtrToStack S){ElementType ret;if (IsEmpty(S)){memset(&ret, 0, sizeof(ElementType));return ret;}ret = *(S->Element + S->TopOfStack);S->TopOfStack--;return ret;}bool PrintAllNode(PtrToStack S){uint32_t ElementCnt = 0;int32_t Top = (S->TopOfStack);while (Top > EMPTY_TOS){printf("No %d element is %c\r\n", ++ElementCnt, (*(S->Element + Top)).Ch);Top--;}printf("******** End ********\r\n\n");return true;}#ifndef __STACK_ARRAY_H_#define __STACK_ARRAY_H_#include <stdbool.h>#include <stdint.h>#include <malloc.h>#include <stdbool.h>#include <stdio.h>#include <memory.h>#define MIN_SIZE (1)#define EMPTY_TOS (-1)typedef union{char Ch;uint16_t Index;double Value;} ElementType;typedef struct{ElementType *Element;int32_t TopOfStack;int32_t Capacity;} StackType;typedef StackType *PtrToStack;PtrToStack CreatStack(uint32_t size);bool DisposeStack(PtrToStack S);bool IsEmpty(PtrToStack S);bool IsFull(PtrToStack S);bool MakeEmpty(PtrToStack S);bool Push(PtrToStack S, ElementType X);ElementType Top(PtrToStack S);bool Pop(PtrToStack S);ElementType TopAndPop(PtrToStack S);bool PrintAllNode(PtrToStack S);#endif
1 1
- 数据结构-----栈数组实现
- 数据结构---栈(数组实现)
- 数据结构-用数组实现栈
- 【数据结构】栈-数组的实现
- [数据结构] 栈的数组实现
- 数组实现栈的数据结构
- 【数据结构】栈的数组实现
- 简单数据结构---数组实现栈
- 【JAVA数据结构】栈(数组实现)
- 【数据结构】栈的数组实现
- 用静态数组实现栈数据结构
- 数据结构之数组实现栈结构
- 数据结构栈stack的动态数组实现
- 数据结构学习之数组栈实现
- 经典数据结构--数组实现的栈
- 利用数组实现数据结构——栈
- 简单数据结构之数组栈(C++实现)
- 【数据结构】一个数组实现两个栈
- librtmp发送AVC,AAC数据包
- Linux进度条的实现
- Snow祝你元宵节快乐!(求n的阶乘的位数)
- Java中的equals
- 挖矿程序minerd入侵分析和解决办法
- 数据结构---栈(数组实现)
- 二叉树建立,前序遍历,中序遍历,后序遍历 思路
- getParameter/geAttribute
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- C++中的静态数据成员
- LeetCode 341. Flatten Nested List Iterator
- (第一,二章)软件质量,软件测试的概念
- Linux进度条
- ZOJ题目类型汇总