zoukankan      html  css  js  c++  java
  • 1.4栈

    栈:后进先出的线性表,要求在表尾进行数据的删除和插入操作、

      1)栈的元素必须先进后出

      2)栈的操作只能限定在这个顺序表的表尾进行。

    对于栈,这个顺序表或者链表的表尾(进行删除和插入的地方)称为栈顶top,相应的表头称为栈底bottom、

    定义一个顺序栈:

    typedef struct{
        ElemType *base;//指向栈底的指针变量
        ElemType *top; //指向栈顶的指针变量   
        int stacksize;//栈的当前可使用的最大容量
    }sqStack;
    

    创建一个空栈

    #define STACK_INIT_SIZE 100
    initStack(sqStack *s){
    	//内存中开辟一段连续空间作为栈空间,首地址赋值给s->base 
    	s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    	if(!s->base)	exit(0);	//分配空间失败 
    	s->top = s->base;			//最开始,栈顶就是栈底,此时为空栈 
    	s->stacksize = STACK_INIT_SIZE;
    }
    

      

    入栈

    #define STACKINCREMENT 10
    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) exit(0); //分配空间失败 s->top = s->base + s->stacksize; s->stacksize = s->stacksize + STACKINCREMENT;//设置栈的最大容量 } *(s->top) = e;//放入数据 s->top++;  }

      注意:top指向的空间始终为栈顶元素的上一个空间。

    出栈:

    Push(sqStack *s,ElemType e){
    	if(s->top = s->base ) return;
    	*e = *--(s->top);//先将指针减一,再取出指针指向的内容,赋值给e
    }
    

      

    清空栈:希望将栈中元素全部作废,而栈本身的物理空间并不一定发生改变。

    ClearStack(sqStack *s) {
        s->top = s->base;
    }
    

     

    销毁一个栈:释放掉该栈所占据的物理内存空间。

    DestroyStack(sqStack *s){
    	free(s->base);
    	s->base = s->top =NULL;
    	s->stacksize = 0;
    }
    

      

    计算栈的当前容量

    int StackLen(sqStack *s){
    	return (s->base - s->top);
    	
    }
    

      

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    springMVC(5)---导入excel文件数据到数据库
    springMVC(4)---生成excel文件并导出
    springMVC(3)---利用pdf模板下载
    springMVC(1)---@RequestMapping详解
    springMVC(2)---获取前段数据
    【JS】---5 JS通过事件隐藏显示元素
    【JS】---4用JS获取地址栏参数方法
    【功能代码】---3 JS判断字符串是否包含某个字符串
    基于maven的ssm框架整合
    java提高(9)---HashMap解析
  • 原文地址:https://www.cnblogs.com/dd2hm/p/6845906.html
Copyright © 2011-2022 走看看