博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构--栈的思想与数组实现
阅读量:4579 次
发布时间:2019-06-09

本文共 2349 字,大约阅读时间需要 7 分钟。

    栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶,对栈的基本操作有进栈(Push)和出栈(Pop),前者就是插入操作,后者就是删除操作,由于只能在一端进行删除或者插入操作,因此栈中的数据是后进先出的,如下图所示:

    栈的实现可以通过链表实现,也可以通过数组实现,通过数组实现的代码如下:

   

#include 
#include
using namespace std;typedef struct StackRecord* Stack;#define EmptyTos -1 //栈是否为空的标志位#define MinStackSize 10 //栈的最小容量为10struct StackRecord{ int Capacity; //栈的容量 int TopOfStack; //栈的顶端 int *Array; //一个数组};//函数声明///int IsEmpty(Stack s); //检查一个栈是否为空int IsFull (Stack s); //检查一个栈是否满了void MakeEmpty (Stack s); //创建一个空栈的“栈底”Stack CreatStack (int MaxElements); //创建一个栈,大小为MaxElementsvoid DisposeStack (Stack s); //释放一个栈void Push(int x, Stack s); //进栈int Pop(Stack s); //出栈,返回栈顶元素int Top(Stack s); //返回栈顶元素,不出栈//函数定义///int IsEmpty(Stack s){ return s->TopOfStack == EmptyTos;}int IsFull (Stack s){ if(s->TopOfStack > s->Capacity ) { cout << "stack full" << endl; return 1; } else { return 0; }}void MakeEmpty (Stack s){ s->TopOfStack = EmptyTos;}Stack CreatStack (int MaxElements){ Stack s; if (MaxElements < MinStackSize) { cout << "stack size is too small" << endl; } s = static_cast
(malloc(sizeof(struct StackRecord))); if(s == NULL) { cout << "out of space!!!"; } s->Array =static_cast
(malloc(sizeof(int)*MaxElements)); if(s->Array == NULL) { cout << "out of space!!!"; } s->Capacity = MaxElements; MakeEmpty(s); return s;}void DisposeStack (Stack s){ if (s != NULL) { free(s->Array ); free(s); }}void Push(int x, Stack s){ if(IsFull(s)) { cout << "Full stack" << endl; } else s->Array [++(s->TopOfStack )] = x;}int Pop(Stack s){ if(!IsEmpty(s)) { return s->Array [(s->TopOfStack)--]; } else { cout << "Empty stack " << endl; return -1; }}int Top(Stack s){ if(!IsEmpty(s)) { return s->Array [s->TopOfStack]; } else { cout << "Empty stack " << endl; return -1; }}int main (){ ///测试栈 Stack stack_1 = CreatStack (15); Push(23, stack_1); //进栈 Push(56, stack_1); Push(78, stack_1); int num = Pop(stack_1); int num2 = Pop(stack_1); int num3 = Pop(stack_1); cout << Top(stack_1) << endl; return 0;}

  微机原理里面讲到的栈也是这个意思,因此理解栈的概念最重要。

      夜深了,天似乎变黑了。

 

转载于:https://www.cnblogs.com/1242118789lr/p/6719947.html

你可能感兴趣的文章