【数据结构】线性表—栈与队列

发布时间 2023-12-29 09:44:36作者: 綾川雪絵

什么是栈和队列

栈(stack),是一种"后进先出"(Last In First Out,LIFO)的线性表,其限制是只允许在表的一端进行插入和删除运算。比如往桌子上放盘子,往上放盘子(压栈)后,只能从最上面(栈顶)取盘子(弹栈)。

队列(queue),是一种"先进先出" (First in First Out,FIFO)的线性表,其限制是允许在表达的一端进行删除操作,另一端进行插入运算。

栈和队列的数组模拟实现以及常见基本算法

 

栈的实现:

int stack[MAXN]; //开辟栈需要的数组空间
int top = 0; //栈顶指针,指向下一个待插入的数组位置

 结构体方法:

#define MAXSIZE 50  //定义栈中元素的最大个数
typedef int ElemType;   //ElemType的类型根据实际情况而定,这里假定为int
typedef struct{
    ElemType data[MAXSIZE];
    int top;    //用于栈顶指针
}SqStack;

 

基本算法:

判断栈是否为空:

bool stackEmpty(int top) {
     if (top == 0) return true;
     else
         return false;
}

判断栈是否满栈:

bool stackOverflow (int top) {
    if (top >= MAXN) return true;
    else
        return false;
}

压栈操作:

void push(int x) {
    if(top >= MAXN)
       cout << "Stack is overflow";
    else
        stack[top++]=x; //stack[top]=x;top++;
}

出栈操作:

void pop() {
    if (top == 0)
        cout << "Stack is empty.";
    else
        p--;
}

查找栈顶元素:

int topValue() {
    if (top == 0) {
       cout << "Stack is empty.";
        return -1;
    }
    else
        return stack[top-1]; //top是下一个待插入栈空间的指针,所以栈顶是top-1;
}

 

 

队列的实现:

int queue[MAXN]; //开辟队列需要的数组空间
int head = 0; //队首指针
int tail = 0; //队尾指针,如果有新的元素插入,就会插入到这个位置

结构体方法:

#define MAXSIZE 50	//定义队列中元素的最大个数
typedef struct{
	<ElemType> data[MAXSIZE];	//存放队列元素
	int front,rear;
}SqQueue;

 

基本算法:

判断队列是否为空:

bool isEmpty() {
    if(head == tail)
        return true;
    else
        return false;
}

判断队列是否溢出:

bool isOverflow() {
    if (tail >=  MAXN)
        return true;
    else
        return false;
}

进队:

void push(int x) {
    if (tail >= MAXN) //判断队列是否溢出
        printf("Queue is overflow");
    else
        queue[tail++] = x; //queue[tail]=x;tail++;
}

出队:

void pop() {
     if(head == tail)
         printf("Queue is empty.");
     else
         head++;
}

查询队首队元素:

int frontValue() {
    if(head == tail) {
        printf("Queue is empty");
        return -1;
    } 
    else
        return queue[head];
}

 

单调栈和单调队列

 

STL中的栈和队列