zoukankan      html  css  js  c++  java
  • (一)栈和队列的基本概念

    - 栈(stack)

    • 栈(stack)是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。
    • 栈的特点:栈的修改是按后进先出的原则进行的。因此,栈又称为后进先出(last in first out)的线性表(LIFO)。
    • 栈的基本操作:在栈顶进行插入或删除,栈的初始化、判空及取栈顶元素等。
    //栈的基本方法-构造一个存储字符元素的栈 即stack.h头文件
    #include<stdio.h>
    #include<stdlib.h>
    #define INITSIZE 100
    #define INCRSIZE 10
    #define ERROR 0
    #define OK 1
    
    typedef int Status;
    typedef struct {//构造栈
      char *base;
      char *top;
      int size;
    } SqStack;
    
    Status InitStack(SqStack *s) {//初始化栈
      s->base = (char *)malloc(INITSIZE * sizeof(char));
      if (!s->base)
        return ERROR;
      
      s->top = s->base;
      s->size = INITSIZE;
      return OK;
    }
    
    Status ClearStack(SqStack *s) {//清空栈
      s->top = s->base;
    }
    
    Status StackEmpty(SqStack *s) {//判空
      if (s->top == s->base)
        return 1;
      else 
        return 0;
    }
    
    int StackLength(SqStack (*s) {//获取栈的长度
      return s->top - s->base ;
    } 
    
    Status GetTop(SqStack s, char *e) {//获取栈顶元素
      if (s.top == s.base)
        return ERROR;
      *e = *(s.top - 1);
      return OK;
    }
    
    Stack Push(SqStack *s, char e) {//压栈
      if (s->top - s->base >= s->size) {
        s->base = (char *)realloc(s->base, (s->size + INCRSIZE)*sizeof(char));
        if (!s->base)
          exit(1);
        s->top = s->base + s->size;
        s->size += INCRSIZE;
      }
      *(s->top) = e;
      s->top ++;
      return OK;
    }
    
    Status Pop(SqStack *s, char *e) {//弹出元素
      if (s->top == s->base)
        return ERROR; 
      *e = *(--s->top);
      return OK;  
    }
    
    void StackTraverse(SqStack *s) {//打印栈中元素,栈顶->栈底
      if (!s->base)
        exit(1);
      char *t = s->top - 1;
      while(t >= s->base) {
        printf("%c", *t);
        t--;
      } 
    }
    //c++栈的基本方法
    #include<iostream>
    using namespace std;
    
    #define starksize 100 
    typedef struct{
        char *base;
        char *top;
        int length ;
    }StarkTR
    
    typedef struct{
        int *base;
        int *top;
        int length ;
    }StarkND; //寄存操作数
    
    int InitTR(StarkTR &L){   //初始化寄存operater栈 
        L.base = new char[starksize];
        L.top = L.base;
        L.length = starksize; 
        return 1;
    }
    
    int PushTR(StarkTR &L,char e){   //入栈 
        if(L.top - L.base == L.length){
            cout<<"栈满!";
            return 0; 
        }
        *L.top++ = e;
        return 1;
    }
    
    char PopTR(StarkTR &L,char &e){   //出栈 
        if(L.top - L.base == 0){
            cout<<"栈空!";
            return 0;
        }
        e = *--L.top;
        return 1;
    }
    
    char GetTopTR(StarkTR L){  //取栈顶元素 字符
        if(L.top != L.base)
            return *(L.top -1); 
    }
    
    int GetTopND(StarkND L){  //取栈顶元素 数值
        if(L.top != L.base)
            return *(L.top -1); 
    }

    - 队列(queue)

    • 队列(queue)和栈相反,是一种先进先出(first in first out,FIFO)的线性表。它允许在表的一端进行插入,而在另一端删除元素。这和我们生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。
    • 队列的基本操作:初始化空队列、清空队列、判空、获取队列的长度、获取队头元素、插入队尾元素、删除队头元素、visit()从队头到队尾遍历等。

     目录

  • 相关阅读:
    转:NetBackup 7.5:放下磁带,才能走更远?
    HP NIC Teaming技术探讨
    Lagged Mailbox Database Copy in Exchange 2010
    Netbackup SSO
    Move or migrate user accounts from old Linux server to a new Linux server
    转:VMware vsphere 5.0新体验总结
    VMware vSphere: What’s New [V 5.1]
    windows server 2008 R2上安装MRTG指南
    VMware vCenter vDS 分布式交换机
    VMware vSphere: Install, Configure, Manage [V5.0]
  • 原文地址:https://www.cnblogs.com/cgy-home/p/15236421.html
Copyright © 2011-2022 走看看