• 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);
    	
    }
    

      

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    日总结07
    Flask使用json或jsonify返回响应的数据
    日总结06
    tensorflow 代码流程02
    日总结05
    题解 P1505 [国家集训队]旅游
    数学期望
    常用软件
    HTMLHelper
    DateHelper(辅助类)
  • 原文地址:https://www.cnblogs.com/dd2hm/p/6845906.html
Copyright © 2020-2023  润新知