顺序栈
建立一个顺序栈,指定输入十个数
要求:
(1)输出栈顶
(2)按照出栈顺序输出十个数
// 队列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//建立顺序栈,输入 10 个数,依次入栈,输出栈顶元素,再依次出栈打印输出。
#include <stdio.h>
#include <crtdbg.h>
//#include <corecrt_malloc.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
//顺序栈结构类型定义
#define STACK_INIT_SIZE 100 // 栈存储空间的初始分配量
#define STACKINCREMENT 10 // 栈存储空间的分配增量
typedef int SElemType;
typedef struct
{
SElemType* base; //栈空间基址
SElemType* top; //栈顶指针
int stacksize; //当前分配的栈空间大小
}SqStack;
//顺序栈初始化函数定义
Status InitStack_Sq(SqStack& S)
{
S.base = (SElemType*)malloc(STACKINCREMENT * sizeof(SElemType));
if (!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
//顺序栈销毁函数定义
Status DestroyStack_Sq(SqStack& S)
{
if (!S.base)return ERROR;
free(S.base);
S.base = S.top = NULL;
S.stacksize = 0;
return OK;
}
//进顺序栈函数定义
Status Push(SqStack& S, SElemType e)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if (!S.base)exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top = e;
S.top++;
return OK;
}
//取顺序栈顶元素函数定义
Status GetTop_Sq(SqStack S, SElemType& e)
{
if (S.top == S.base)return ERROR;
e = *(S.top - 5);
return OK;
}
//出顺序栈函数定义
Status Pop(SqStack& S, SElemType& e)
{
if (S.top == S.base)return ERROR;
e = *--S.top;
return OK;
}
int main()
{
//变量定义
SqStack S;
SElemType temp;
int CLOCK = 1;
int N = 10;//数据长度控制
//初始化栈函数调用
InitStack_Sq(S);
printf("初始化成功,空间的大小为:%d\n", S.stacksize);
//顺序输入 10 个数,入栈
while (N--)
{
printf("请输入第%d个数,目前还可输入%d个数\n", N + 1, N + 1);
scanf_s("%d", &temp);
Push(S, temp);
}
//取顺序栈顶元素
GetTop_Sq(S, temp);
printf("栈顶元素为:%d\n",temp);
//出顺序栈,依次打印输出 10 个数
while (S.base != S.top)
{
++CLOCK;
Pop(S, temp);
printf("第%d个出栈的是%d\n", CLOCK, temp);
}
//顺序栈销毁函数调用;
DestroyStack_Sq(S);
printf("销毁完成");
return 0;
}