zoukankan      html  css  js  c++  java
  • 数据结构——顺序栈(动态分配空间)的基本操作

    代码主要来源:【数据结构】【清华大学】【严蔚敏】
    顺序栈S的基本运算如下:
    (1)初始化栈S
    (2)栈为空
    (3)依次进栈元素a,b,c,d,e
    (4)栈为非空
    (5)出栈序列:e d c b a
    (6)栈为空
    (7)释放栈

    完整代码如下:

    #include <stdio.h>
    #include <stdlib.h> 
    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT 10
    #define OK 1 
    #define OVERFLOW -1
    #define ERROR 0
    
    typedef int SElemType;
    typedef int Status;
    
    typedef struct Stack{
    	SElemType *top;
    	SElemType *base;
    	int  stacksize;
    }SqStack; 
    
    
    Status InitStack(SqStack &S)
    {
    	S.base=((SElemType*)malloc(sizeof(SqStack)*STACK_INIT_SIZE));
    	if(!S.base) exit(-1);
        S.top=S.base;
        S.stacksize=STACK_INIT_SIZE;
        return OK;
    } 
    
    Status Push(SqStack &S, SElemType 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.top指向新的S.base+S.stacksize(也有可能S.base没变) 
            S.stacksize+=STACKINCREMENT;
        }
        *S.top++=e;  //先赋值然后位置再加一 
        return OK;
    }
    
    Status Pop(SqStack &S,SElemType &e)
    {
        if(S.top==S.base)//栈顶和栈顶指向同一个存储空间则栈满了 
            return ERROR;
        e=*--S.top;  //指针位置先减一再赋值 
        return OK;
    }
    
    
    Status GetTop(SqStack S,SElemType &e)//返回栈顶元素,不删除 
    {
        if(S.top>S.base)
        {
            e=*(S.top-1);
            return OK;
        }
        else
            return ERROR;
    }
    
    Status StackEmpty(SqStack S)
    {
        if(S.top==S.base)
            return 1;
        else
            return 0;
    }
    
    Status DestroyStack(SqStack &S)
    {
        free(S.base);
        S.base=S.top=NULL; 
        S.stacksize=0;
        return OK;
    }
    
    
    int main()
    {
    	char a[5]={'a','b','c','d','e'};
    	SqStack s1;
    	int i,e1;
    	InitStack(s1);
    	if(InitStack(s1))
    	{
    		printf("初始化成功!
    "); 
    	}
    	if(StackEmpty(s1))
    	{
    		printf("此时栈为空
    "); 
    	}
    	printf("依次进栈元素:a,b,c,d,e
    "); 
    	for(i=0;i<5;i++)
    	{
    		Push(s1,a[i]);
    	}
    	if(!StackEmpty(s1))
    	{
    		printf("此时栈非空
    "); 
    	}
    	printf("出栈序列为:"); 
    	while(!StackEmpty(s1))
    	{
    		Pop(s1,e1);
    		printf("%c ",e1);
    	 } 
    	if(StackEmpty(s1))
    	{
    		printf("
    此时栈为空
    "); 
    	}
    	if(DestroyStack(s1))
    	{
    		printf("释放栈成功!
    "); 
    	}
    }
    
    
    
  • 相关阅读:
    Appium Android Bootstrap源码分析之控件AndroidElement
    Appium Android Bootstrap源码分析之简介
    monkey源码分析之事件注入方法变化
    安卓Monkey源码分析之运行流程
    adb概览及协议参考
    MAC中在eclipse luna上搭建移动平台自动化测试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
    MonkeyImage API 实践全记录
    Structs 2 session 学习
    The First
    用例图
  • 原文地址:https://www.cnblogs.com/vivid-victory/p/10090476.html
Copyright © 2011-2022 走看看