用队列实现栈
2022/8/11大约 3 分钟
数据结构
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
typedef int QDataType;
// 由于队列是 FIFO(先进先出),采用数组会移动数据,故采用单链表(带头结点)
typedef struct QueueNode {
QDataType data;
struct QueueNode *next;
} QueueNode;
// 队列需要控制队头和队尾两个指针,单独用一个结构体存放
typedef struct Queue {
QueueNode *head; // 队头
QueueNode *tail; // 队尾
} Queue;
数据结构
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
// 栈可以用数组或链表来存取数据,数组更优,因此这里用数组实现
typedef int SDataType;
typedef struct Stack {
SDataType *arr;
int top; // 栈顶
int capacity; // 容量
} Stack;
这里我们主要介绍的是链表中最复杂的结构:循环双向链表 (Circular Doubly Linked List)
数据结构:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int DataType;
typedef struct CDList {
DataType data;
struct CDList *prev; // 指向上一结点
struct CDList *next; // 指向下一结点
} Node;
∅←ab⇆cd→∅
这里的单链表是无头非循环的,与 数据结构 - 单链表 中介绍的一致,并使用到头文件:
问题:
建议
在阅读本篇文章之前,建议先学会 C 语言的语法,包括但不限于:
题目
已知命题公式 A=¬(p∨q)∧((p∨r)∨s) ,用 Java 或 C/C++ 语言编写程序构造该命题公式的真值表,真值表输出样式自己设计(变量值可以不手工输入)。