文章目录
- 栈
- 一、顺序栈
- 二、链栈
- 队列
- 一、顺序队列
- 二、链队列
栈
- 逻辑结构:先进后出
- 栈(stack)是一种只能在一端(栈顶,另一端叫栈底)进行插入或删除操作的线性表。
- 栈的逻辑结构属于线性表,只不过在操作上加了一些约束。
存储结构:
一、顺序栈
- 顺序栈的实现方法:
int stack[maxSize];
int top = -1
- 元素入栈:
stack[++top] = 1;
stack[++top] = 2;
……
- 元素出栈:
x = stack[top--];
- 如何判断栈空和栈满:
(maxSize为数组长度:8)
二、链栈
- 链栈的实现方法:
- 元素入栈:
- (始终让top指向新插入的结点)
- 元素出栈:
- 如何判断栈满或栈空:
队列
- 由于队列只能在前端删除,后端插入,这个性质,才引申出先进先出的。入队:rear++;出队, front++。
- 逻辑结构:先进先出
- 队列(queue)是一种插入元素只能在一端(队尾)能进,删除元素只能在另一端(队头)进行的线性表。
- 队列的逻辑结构属于线性表,只不过在操作上加了一些约束。
存储结构:
一、顺序队列
- 顺序队列的实现方法:
int queue [maxsize];
int front 0, rear = 0;
- 错误的元素入队:
queue[++rear] = x; //rear尾指针
- 错误的元素出队:
x = queue[++front]; //front头指针
上边两种操作会造成假溢出(下图继续入队元素就会发生数组越界的情况)
- 正确的元素入队:
rear=(rear+1) %maxSize; //rear此时为8,maxSize是9,通过此操作rear=0,形成循环
queue [rear] = x;
- 正确的元素出队:
front=(front+1)%maxSize;
x= queue [front];
- 如何判断队空和队满:
二、链队列
1.head->next – NULL为真,则队空;
只有有足够的内存,队就不会满。如果rear和front包裹在一个结构体中:
2.front为空时队列为空。