您的位置:首页 > 理论基础 > 数据结构算法

顺序栈的各种基本运算

2012-12-26 13:40 225 查看
这里我们假设栈顶指针指示栈顶元素的提前一个位置

#include <stdio.h>
#include <malloc.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct
{
ElemType *base; //栈底指针
ElemType *top;  //栈顶指针
int stacksize;
}sqstack;

void Clearstack(sqstack *s)
{
free(s->base);
}

void InitStack(sqstack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if ( !s->base)
{
printf("InitStack error!");
return;
}
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}

void Push(sqstack *s,ElemType e)
{
if ( s->top - s->base >= s->stacksize)
{
//指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
//新的大小一定要大于原来的大小不然的话会导致数据丢失!
s->base = (ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if ( ! s->base)
{
printf("Increase memory error!");
return;
}
s->top = s->base + s->stacksize;
s->stacksize += STACKINCREMENT;
}
*s->top++ = e;
}

ElemType Pop(sqstack *s)
{
ElemType x;
if ( s->top != s->base)
{
x = *--s->top;
return x;
}
else
{
printf("栈为空!\n");
return ('F');
}
}

int StackLength(sqstack *s)
{
int i = 0;
ElemType *p;
p = s->top - 1;
do
{
i++;
p--;
} while (p != s->base - 1);
return i;
}

int StackEmpty(sqstack *s)
{
return(s->top == s->base);
}

ElemType Gettop(sqstack *s)
{
ElemType e;
if ( s->top == s->base )
{
printf("栈为空!\n");
return ('F');
}
e = *(s->top -1);
return e;
}

void output(sqstack *s)
{
ElemType *p;
p = s->top - 1;
do
{
printf("%c",*p);
p--;
} while ( p != s->base - 1);
printf("\n");
}

void main()
{
ElemType e;
sqstack *s;
s = (sqstack *)malloc(sizeof(sqstack));
InitStack(s);
printf("栈为:%s\n",(StackEmpty(s)?"空":"非空"));
Push(s,'v');
Push(s,'o');
Push(s,'y');
Push(s,'e');
Push(s,'v');
Push(s,'o');
Push(s,'l');
Push(s,'i');
printf("栈为:%s\n",(StackEmpty(s)?"空":"非空"));
printf("栈长度:%d\n",StackLength(s));
printf("栈顶元素:%c\n",Gettop(s));
output(s);
while (!StackEmpty(s))
{
e = Pop(s);
printf("%c",e);
}
printf("\n");
printf("栈为:%s\n",(StackEmpty(s)?"空":"非空"));
printf("释放栈中...\n");
Clearstack(s);
printf("释放栈完成!\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 顺序栈