栈基本操作的C语言实现
/
// 作者:happy_fun //
// 栈基本操作的C语言实现 //
// 时间:2011年11月19号 //
// 未经作者允许不得转载! //
/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREACE 10
typedef struct SElemType
{
char data;
}elemtype;
typedef struct SqStack
{
elemtype *base;//base是变量名字,elemtype *表示base只能存储elemtype类型的变量的地址//int *表示存储整型变量地址
elemtype *top;//top是变量名字,elemtype *表示top只能存储elemtype类型的变量的地址,指针就是地址,地址就是指针!
int strcksize;
}stack,*pstack;
void main()
{
int Push(stack *s,elemtype e);
int InitStack(stack *s);
elemtype Pop(stack *s,elemtype e);
elemtype GetTop(stack *s,elemtype e);
int StackLength(stack *s);
int a;
stack s;
elemtype e,del;
e.data='T';
if(InitStack(&s)==1)
printf("构造空栈成功!\n\n");
if(Push(&s,e))
printf("压栈成功!\n\n");
printf("返回的栈顶元素为:%c\n\n",GetTop(&s,e));
printf("删除的栈顶元素为:%c\n\n",Pop(&s,del));
printf("该栈的长度为:%d\n\n",a=StackLength(&s));
}
//构造空栈
int InitStack(stack *s)//s是变量名,stack *表示s只能存储stack类型的变量地址
{
s->base=(elemtype *)malloc(STACK_INIT_SIZE*sizeof(elemtype));
s->top=s->base;
s->strcksize=STACK_INIT_SIZE;
return 1;
}
///
//将元素e压入栈
int Push(stack *s,elemtype e)
{
if(s->top-s->base>=s->strcksize)//栈满追加空间
{
s->base=(elemtype *)realloc(s->base,(s->strcksize+STACKINCREACE)*sizeof(elemtype));
s->strcksize=s->strcksize+(s->strcksize+STACKINCREACE);
}
if(!s->base)
exit(0);
*(s->top)=e;
s->top++;
printf("分配的存储空间为:%d\n",s->strcksize);
return 1;
}
//
//删除栈顶元素
elemtype Pop(stack *s,elemtype e)
{
if(s->top==s->base)
{
printf("出错!\n");
exit(0);
}
s->top--;
e=*(s->top);
printf("删除栈顶元素成功!\n");
return e;
}
//
//用e返回栈顶元素
elemtype GetTop(stack *s,elemtype e)
{
if(s->top==s->base)
{
printf("Error!\n");
exit(0);
}
s->top=s->top-1;
e=*(s->top);
s->top=s->top+1;
return e;
}
/
//返回栈的元素个数,即栈的长度
int StackLength(stack *s)
{
int length;
length=s->strcksize;
return length;
}
第一次发帖,数据结构中栈的基本操作的实现,欢迎大家指导!