数据结构 栈的建立
【摘要】 #include <stdio.h>#include <stdlib.h> #define STACT_INIT_SIZE 100#define STACTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2 typedef int SElemType; typedef struct...
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
#define STACT_INIT_SIZE 100
-
#define STACTINCREMENT 10
-
#define OK 1
-
#define ERROR 0
-
#define OVERFLOW -2
-
-
typedef int SElemType;
-
-
-
typedef struct
-
{
-
SElemType *base;
-
SElemType *top;
-
int stacksize;
-
}SqStack;
-
-
int InitStack(SqStack &S)
-
{
-
S.base = (SElemType *)malloc(STACT_INIT_SIZE * sizeof(SElemType));
-
if (!S.base)
-
{
-
exit(OVERFLOW);
-
}
-
S.top = S.base ;
-
S.stacksize = STACT_INIT_SIZE;
-
return OK;
-
}
-
-
int Push(SqStack &S, SElemType e)
-
{
-
if (S.top - S.base >= S.stacksize)
-
{
-
S.base = (SElemType*)realloc(S.base , (S.stacksize + STACTINCREMENT) * sizeof(SElemType));
-
if (!S.base)
-
{
-
exit(OVERFLOW);
-
}
-
S.top = S.base + S.stacksize ;
-
S.stacksize += STACTINCREMENT;
-
}
-
*S.top++ = e;
-
return OK;
-
}
-
-
int Pop(SqStack &S, SElemType &e)
-
{
-
if (S.base == S.top)
-
{
-
return ERROR;
-
}
-
e = *--S.top;
-
return OK;
-
}
-
-
void Print_Sq(SqStack S)
-
{
-
if (S.top == S.base)
-
{
-
return;
-
}
-
while (S.top - S.base != 0)
-
{
-
printf("%d ",*--S.top);
-
}
-
printf("\n");
-
}
-
-
int GetTop(SqStack S,SElemType &e)
-
{
-
if (S.base == S.top)
-
{
-
return ERROR;
-
}
-
e = *(S.top-1);
-
return OK;
-
}
-
-
int StackEmpty(SqStack S)
-
{
-
if (S.top == S.base )
-
{
-
return 1;
-
}
-
return 0;
-
}
-
-
int StackLength(SqStack S)
-
{
-
return S.top - S.base ;
-
}
-
-
-
int ClearStack(SqStack &S)
-
{
-
S.top = S.base ;
-
return OK;
-
}
-
-
int DestroyStack(SqStack &S)
-
{
-
free(S.base);
-
S.base = NULL;
-
S.top = NULL;
-
S.stacksize = 0;
-
return OK;
-
}
-
-
-
int main()
-
{
-
SqStack S;
-
int i,n,e;
-
InitStack(S);
-
printf("请输入您要建立初始栈的大小:");
-
scanf("%d",&n);
-
printf("请输入 %d 个栈元素:",n);
-
for (i=0; i<n; i++)
-
{
-
scanf("%d",&e);
-
Push(S,e);
-
}
-
printf("您输入的栈是:");
-
Print_Sq(S);
-
printf("请输入一个元素压栈:");
-
scanf("%d",&e);
-
Push(S,e);
-
printf("压入元素后的栈是:");
-
Print_Sq(S);
-
printf("执行一次出栈操作...\n");
-
Pop(S,e);
-
printf("出栈的元素是:%d\n",e);
-
printf("出栈后的栈元素是:");
-
Print_Sq(S);
-
GetTop(S,e);
-
printf("当前栈顶元素:%d\n",e);
-
printf("当前栈的元素个数:%d\n",StackLength(S));
-
return 0;
-
}
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/17249071
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)