栈的实现代码及操作:
#include <malloc.h>
#include <stdio.h>
#define STACK_INIT_SIZE 100
#define INCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct SqStack
...{
ElemType *base;
int top;
int stacksize;
}SqStack;
//清空栈
int ClearStack(SqStack *s)
...{
s->top=-1;
return OK;
}
//判断是否为空
int StackEmpty(SqStack s)
...{
if(s.top==-1)
return TRUE;
else
return FALSE;
}
//初始化
int InitStack(SqStack *s)
...{
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
return OVERFLOW;
s->top=-1;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
//入栈
int Push(SqStack *s,ElemType e)
...{
if(s->top==s->stacksize-1)
...{
ElemType *newbase=(ElemType *)realloc(s->base,sizeof(ElemType)*(s->stacksize+INCREMENT));
if(!newbase)
return OVERFLOW;
s->base=newbase;
s->stacksize+=INCREMENT;
}
s->top++;
s->base[s->top]=e;
return OK;
}
//出栈
int Pop(SqStack *s,ElemType *e)
...{
if(StackEmpty(*s))
return ERROR;
*e=s->base[s->top];
s->top-=1;
return OK;
}
//栈顶元素
int GetTop(SqStack s,ElemType *e)
...{
if(s.top==-1)
return ERROR;
else
...{
*e=s.base[s.top];
return OK;
}
}
int main(int argc,char *argv[])
...{
int i;
ElemType elem;
SqStack s;
InitStack(&s);
for(i=0;i<5;i++)
...{
printf("input a number:");
scanf("%d",&elem);
Push(&s,elem);
printf(" ");
}
for(i=0;i<5;i++)
...{
if(Pop(&s,&elem)==OK)
...{
printf("%d ,",elem);
}
else
...{
printf("empty!");
break;
}
}
}
本文介绍了一种使用C语言实现的栈数据结构及其基本操作,包括初始化、清空、判断是否为空、入栈、出栈和获取栈顶元素等。通过示例代码展示了如何创建栈并进行元素的压入与弹出。
1915

被折叠的 条评论
为什么被折叠?



