//栈的顺序存储结构,C语言实现
//栈的建立、销毁、压栈、出栈、取栈顶元素操作
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream>
using namespace std;
#define STACK_INIT_SIZE 10 //栈的总存储容量
#define STACKINCREMENT 10 //增加的容量
typedef int ElemType;
typedef struct SQSTACK
{
ElemType *base;//栈底指针
ElemType *top;//栈顶指针
int stacksize;//栈总的可用容量
}SqStack;
//栈的建立
SqStack* InitStack()
{
SqStack *s = (SqStack *)malloc(sizeof(SqStack));
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (!s->base)
{
exit(0);
}
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
return s;
}
//压栈
bool Push(SqStack *s, ElemType e)
{
if (s->top - s->base >= s->stacksize)
{
s->base = (ElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType)); //如果栈满了,扩充栈容量
if (!s->base)
{
return false;
}
s->top = s->base + s->stacksize;
s->stacksize = s->stacksize + STACKINCREMENT;
}
*(s->top) = e;
s->top++;
return true;
}
//出栈
bool Pop(SqStack *s, ElemType &e)
{
if (s->top == s->base)
{
return false;
}
--(s->top);
e = *(s->top);
return true;
}
//获取栈顶元素,不出栈
ElemType GetTop(SqStack *s)
{
ElemType e;
if (s->top == s->base)
{
exit(0);
}
e = *(s->top -1);
return e;
}
//清空栈
void ClearStack(SqStack *s)
{
s->top = s->base;
}
//销毁一个栈
void DestroyStack(SqStack *s)
{
int i, len;
len = s->stacksize;
if (s->base)
{
free(s->base);
}
s->base = s->top = NULL;
s->stacksize = 0;
free(s);
s = NULL;
}
//计算栈的当前大小
int StackLen(SqStack *s)
{
return(s->top - s->base);
}
//显示栈内元素
void DisplayStack(SqStack*s)
{
int length;
ElemType *initbase = s->base;
length = (s->top - s->base);
for (int i = 0; i < length; i++)
{
cout << *(s->base) << " ";
s->base++;
}
cout << endl;
s->base = initbase;
}
int main()
{
SqStack *S = InitStack();
Push(S, 1);
Push(S, 2);
Push(S, 3);
cout << StackLen(S) << endl;
DisplayStack(S);
ElemType elem;
Pop(S, elem);
DisplayStack(S);
cout << GetTop(S) << endl;
DisplayStack(S);
DestroyStack(S);
system("pause");
return 0;
}
运行结果: