LX栈的基本操作
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<string.h>
#include<malloc.h> /* malloc()等 */
#include<io.h> /* eof() */
#include<process.h> /* exit() */
#define OK 1 #define ERROR 0
#define TRUE 1 #define FALSE 0
#define STACK_INIT_SIZE 10 // 存储空间初始分配量
#define STACKINCREMENT 2 // 存储空间分配增量
typedef int SElemType;
typedef int Status;
struct SqStack
{
SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
SElemType *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}; // 顺序栈
Status InitStack(SqStack &S)//构造一个空栈
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
S.top=S.base; if(!S.base) return ERROR;
S.stacksize=STACK_INIT_SIZE; return OK;
}
Status GetTop(SqStack S,SElemType &e)//若栈不空,则用e返回去s的栈顶元素,并返回OK;否则返回ERROR
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}
Status StackEmpty(SqStack S)//判断s是否为空,为空返回TRUE;否则返回FALSE
{
if(S.base==S.top) return TRUE;
else return FALSE;
}
Status Push(SqStack &S,SElemType e)//插入e为新的栈顶元素
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType *)realloc(S.base,(STACK_INIT_SIZE+S.stacksize)*sizeof(SElemType));
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+STACK_INIT_SIZE;
}
*S.top=e;
S.top++;
return OK;
}
Status Pop(SqStack &S,SElemType &e)//若栈不空,则删除s的栈顶元素,用e返回,并返回OK;否则返回ERROR
{
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
int StackLength(SqStack S)//栈的长度
{
return S.top-S.base;
}
Status DestroyStack(SqStack S)//销毁栈S
{
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
Status ClearStack(SqStack S)//置空栈S
{
S.top=S.base;
return OK;
}
int main()
{
int a,n;
SqStack s;
SElemType e;
if(InitStack(s)) // 初始化栈成功
{
printf("输入元素的个数:");
scanf("%d",&n);
while(n--)
{
scanf("%d",&a);
Push(s,a);
}
}
printf("************栈的基本情况************\n");
GetTop(s,e);
printf("栈顶元素为:%d\n",e);
printf("栈的长度为:%d\n",StackLength(s));
printf("**************删除操作**************\n");
Pop(s,e);
printf("删除栈顶元素为:%d\n",e);
GetTop(s,e);
printf("删除后的栈顶元素为:%d\n",e);
printf("删除后栈的长度为:%d\n",StackLength(s));
printf("**************插入操作**************\n");
printf("输入新的栈顶元素:");
scanf("%d",&e);
Push(s,e);
GetTop(s,e);
printf("插入后栈顶元素为:%d\n",e);
printf("插入后栈的长度为:%d\n",StackLength(s));
return OK;
}