zoukankan      html  css  js  c++  java
  • 堆叠顺序

               堆叠顺序,顺序存储结构是堆栈,是利用一组连续地址单元的顺序从堆栈堆栈数据元素的底部沉积。底指针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;
    }
    
    
    

    执行结果:


  • 相关阅读:
    CentOS 7 安装Hadoop前的SSH免密码登录配置
    CentOS 7.1下SSH远程登录服务器详解-转
    Linux系统下如何配置SSH_Centos7 ssh连接配置 CentOS7下安全配置
    如何在CentOS 7上修改主机名
    【转】CentOS 6.3(x86_64)下安装Oracle 10g R2
    【转】CentOS 6.3(x86_32)下安装Oracle 10g R2
    【转】Linux Oracle服务启动&停止脚本与开机自启动
    Cacti在selinux开启的情况下使用
    Nagios在selinux开启的情况下使用
    Nagios状态长时间处于Pending的解决方法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5043505.html
Copyright © 2011-2022 走看看