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

栈的实现可以通过链表实现,也可以通过数组实现,通过数组实现的代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct StackRecord* Stack;
#define EmptyTos -1 //栈是否为空的标志位
#define MinStackSize 10 //栈的最小容量为10
struct StackRecord
{
int Capacity; //栈的容量
int TopOfStack; //栈的顶端
int *Array; //一个数组
};
//////////////////函数声明///////////////////
int IsEmpty(Stack s); //检查一个栈是否为空
int IsFull (Stack s); //检查一个栈是否满了
void MakeEmpty (Stack s); //创建一个空栈的“栈底”
Stack CreatStack (int MaxElements); //创建一个栈,大小为MaxElements
void 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<Stack> (malloc(sizeof(struct StackRecord)));
if(s == NULL)
{
cout << "out of space!!!";
}
s->Array =static_cast<int*>(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;
}
微机原理里面讲到的栈也是这个意思,因此理解栈的概念最重要。
夜深了,天似乎变黑了。
浙公网安备 33010602011771号