#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define OK1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef char ElemType
typedef int Status
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct
{
ElemType *base//在栈构造和销毁之后,base的值为NULL
ElemType *top //栈顶指针
int stacksize//当前已分配的存储空间,以元素为单位
}SqStack
// 构造一个空栈S
Status InitStack(SqStack &S)
{
S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType))
if(!S.base) //存储分配失败
exit (OVERFLOW)
S.top=S.base
S.stacksize=STACK_INIT_SIZE
return OK
}//InitStack
/////////////////// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR /////
Status GetTop(SqStack S,ElemType &e)
{
if(S.top==S.base)
return ERROR
e=*(S.top-1)
return OK
}//GetTop
////////////////// 插入元素e为新的栈顶元素 /////////////////////////////////////
Status 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)
exit (OVERFLOW)
S.top=S.base+S.stacksize
S.stacksize+=STACKINCREMENT
}
*S.top++=e
return OK
}//Push
////////////////// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK否则返回ERROR
Status Pop(SqStack &S,ElemType &e)
{
if(S.top==S.base)
return ERROR
e=*--S.top
return OK
}//Pop
////////// main() //////////////////////////////
void main()
{
int i
char ch,e,c
SqStack S
InitStack(S)
printf("1.Push\t2.Pop\t3.GetTop\t4.exit\n")
while(1)
{
printf("请渣余帆选择:")
scanf("%d",&i)
c=getchar()//*****接受回毁世车符******
switch (i)
{
case 1:
printf("请输入要插入的元素:")
scanf("%c",&ch)
Push(S,ch)
break
case 2:
printf("d出栈顶元素:")
Pop(S,e)
printf("%c\n",e)
break
case 3:
printf("取栈顶元素:")
GetTop(S,e)
printf("%c\n",e)
break
case 4:
exit(0)
default:
printf("ERROR!Please Reput A Number\n")
}
}
}这就如雹算是一个建栈
s.top=s.base ;这是空栈的必要条件
任何一个空栈的s.top=s.base 恒成立,即栈底指针和栈顶指针同指向栈底,此时栈空,画图可知
插入一个元素,s.top+1若是动态插入,则s.top++;
s.stacksize这个是初始存储空间分配量
例如:
#define STACK-INIT-SIZE 100 //此时初始空间大拆歼逗小为100,以元素为单位
#defineSTACKINCREMENT 10//这个是空间分配增量,空间不旅卖足用着个增加
提醒-------看标示符的英文意思就知道它代表的意思了
建议-------自学数据结构前,适当了改昌解一下离散数学及基本数量掌握C语言基础
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)