堆叠顺序

           堆叠顺序,顺序存储结构是堆栈,是利用一组连续地址单元的顺序从堆栈堆栈数据元素的底部沉积。底指针base与栈顶指针top。若base=NULL,则表明栈结构不存在。

top指针初值指向栈底,top=base可用作栈为空的标记。新插入元素后栈顶指针top的值加1,删除元素时减1。即非空栈的栈顶指针top始终在栈顶元素的下一个位置上。

//------------------------栈的顺序实现----------------------//
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 8
#define STACKINCREMENT 5
#define Status int
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct SElemType
{
	int data;
}SElemType;     //构造结点
typedef struct {
	SElemType *base;
	SElemType *top;//非空栈的栈顶指针始终在栈顶元素的下一位置
	int stacksize;
}SqStack; // 构造栈

Status IsEmpty(SqStack S)
{
        if(S.top == S.base)
                return OK;

         return ERROR;
}
Status InitStack(SqStack *S)
{
	//构造一个空栈
	S->base=(SElemType *)malloc( STACK_INIT_SIZE *sizeof( SElemType));
	S->top=S->base;
	S->stacksize=STACK_INIT_SIZE;
	return OK;
}

Status GetTop(SqStack S, SElemType *e)
{
        if( S.top == S.base)     return ERROR;
        e->data=(S.top-1)->data;
        return OK;
}

Status Push(SqStack *S, SElemType e)
{
        //插入的e为新的栈顶元素
        if(S->top -S->base >= S->stacksize)
        {
                S->base=(SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof( SElemType));
                 if( !S->base)    exit(OVERFLOW);
                S->top = S->base + S->stacksize;
                S->stacksize += STACKINCREMENT;
        }

       S->top->data=e.data;
       S->top++;

       return OK;
}

Status Pop(SqStack *S, SElemType *e)
{
        //若栈不为空则返回栈顶元素,并返回OK,否则返回ERROR
        if( S->top == S->base)    return ERROR;
        *e=*--S->top;
        return OK;
}

void Print(SqStack S)
{
        while( S.top != S.base)
        {
                printf("%d ",(S.top-1)->data);
                S.top--;
        }
        printf("
");
}
int main(void)
{
      SqStack S;
      SElemType  e;
      int i;
      InitStack(&S);
      if( IsEmpty(S))
                printf("the stack has nothing installled.。pplese enter:
");
        for(i=0; i<S.stacksize; i++)
        {
              scanf("%d", &e.data);
              Push(&S, e);
      }
        GetTop(S, &e);
        printf("top=%d
", e.data);
        Print(S);
        Pop(&S, &e);
        printf("after pop %d,members in stack are:
",e.data);
        Print(S);
        return 0;
}


执行结果:


原文地址:https://www.cnblogs.com/zfyouxi/p/5043505.html