#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define ElemType int
#define Initesize 100
#define enlarge 10
typedef struct {
ElemType* Top;
ElemType* Base;
int stacksize;
}Stack;
void Initestack(Stack& S)
{
S.Base = (ElemType*)malloc(Initesize*sizeof(ElemType));//分配空间
if (S.Base == NULL)
{
printf("the Initestack creat the space is failed!");//分配失败
/* assert(S.Base);*/
}
S.Top = S.Base;
S.stacksize = Initesize;
}//建立一个空栈
int GetTop(Stack& S,ElemType&e)
{
if (S.Base == S.Top)
{
printf("stack is blank,the GetTop failed execute");
exit(-1);
}//栈为空
e = *(S.Top - 1);
return 1;
}//获取栈顶元素
int Pushelem(Stack& S,ElemType a)
{
if (S.Top - S.Base == S.stacksize)
{
S.Base = (ElemType*)malloc((S.stacksize + enlarge) * sizeof(ElemType));
if (S.Base == NULL)
{
printf("the Initestack creat the space is failed!");//分配失败
/* assert(S.Base);*/
}
S.Top = S.Base + S.stacksize;
S.stacksize +=enlarge;
}//栈满再分配空间
*S.Top++ = a;
return 1;
}/入栈
int Pop(Stack& S,ElemType&e)
{
if (S.Base == S.Top)
{
printf("stack is blank,the Pop failed execute");
exit(-1);
}//栈空
e = *--S.Top;
return 1;
}//出栈
int Print(Stack& S)
{
ElemType* p = S.Base;
while (p != S.Top)
{
printf("%d ", *p);
p++;
}
printf("\nthe Print is end\n");
return 1;
}//遍历栈
int main()//主函数
{
Stack S;
Initestack(S);
Pushelem(S, 3);
Pushelem(S, 4);
Pushelem(S, 5);
Pushelem(S, 6);
Print(S);
return 0;
}
栈的顺序结构实现
于 2023-10-10 11:31:57 首次发布