目录
6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef
本文介绍了C语言使用数组实现栈和队列,及其相关操作
栈(Stack)和队列(Queue)是常用的线性数据结构。在C语言中,可以使用数组或链表来实现栈和队列。
- #define MAX_SIZE 100
-
- int stack[MAX_SIZE];
- int top = -1;
MAX_SIZE
,它表示栈的最大容量。stack
,用于存储栈中的元素。top
,用于表示栈顶的索引,默认值为 -1,表示栈为空。isEmpty()
检查栈是否为空。如果栈为空,返回值为 1,否则返回值为 0。
- int isEmpty() {
- return top == -1;
- }
isFull()
检查栈是否已满。如果栈已满,返回值为 1,否则返回值为 0。
- int isFull() {
- return top == MAX_SIZE - 1;
- }
push()
将元素压入栈中。首先检查栈是否已满,如果已满则打印提示信息并返回,否则将 data
压入栈顶,然后将 top
值加 1。
- void push(int data) {
- if (isFull()) {
- printf("Stack is full. Cannot push element.\n");
- return;
- }
- stack[++top] = data;
- }
pop()
从栈中弹出并返回栈顶元素。首先检查栈是否为空,如果为空则打印提示信息并返回 -1,否则将栈顶元素返回,然后将 top
值减 1。
- int pop() {
- if (isEmpty()) {
- printf("Stack is empty. Cannot pop element.\n");
- return -1;
- }
- return stack[top--];
- }
- #include
- #define MAX_SIZE 100
-
- int stack[MAX_SIZE];
- int top = -1;
-
- int isEmpty() {
- return top == -1;
- }
-
- int isFull() {
- return top == MAX_SIZE - 1;
- }
-
- void push(int data) {
- if (isFull()) {
- printf("Stack is full. Cannot push element.\n");
- return;
- }
- stack[++top] = data;
- }
-
- int pop() {
- if (isEmpty()) {
- printf("Stack is empty. Cannot pop element.\n");
- return -1;
- }
- return stack[top--];
- }
-
- int main() {
- push(10);
- push(20);
- push(30);
-
- printf("Popped element: %d\n", pop());
- printf("Popped element: %d\n", pop());
-
- return 0;
- }
push(10)
将元素 10 压入栈中。push(20)
将元素 20 压入栈中。push(30)
将元素 30 压入栈中。pop()
弹出栈顶元素,并将其打印出来。pop()
弹出栈顶元素,并将其打印出来。- #define MAX_SIZE 100
-
- int queue[MAX_SIZE];
- int front = -1;
- int rear = -1;
MAX_SIZE
,它表示队列的最大容量。queue
,用于存储队列中的元素。front
和 rear
,分别表示队列的前端和后端的索引,默认值均为 -1,表示队列为空。isEmpty()
检查队列是否为空。如果队列为空,返回值为 1,否则返回值为 0。
- int isEmpty() {
- return front == -1;
- }
isFull()
检查队列是否已满。如果队列已满,返回值为 1,否则返回值为 0。
- int isFull() {
- return (rear + 1) % MAX_SIZE == front;
- }
enqueue()
将元素入队。首先检查队列是否已满,如果已满则打印提示信息并返回,否则根据队列的循环性质更新 rear
的值,并将 data
存储到相应位置。
- void enqueue(int data) {
- if (isFull()) {
- printf("Queue is full. Cannot enqueue element.\n");
- return;
- }
- if (isEmpty()) {
- front = 0;
- }
- rear = (rear + 1) % MAX_SIZE;
- queue[rear] = data;
- }
dequeue()
用于从队列中出队并返回队首元素。首先检查队列是否为空,如果为空则打印提示信息并返回 -1,否则取出队首元素并根据队列的循环性质更新 front
和 rear
的值。
- int dequeue() {
- if (isEmpty()) {
- printf("Queue is empty. Cannot dequeue element.\n");
- return -1;
- }
- int data = queue[front];
- if (front == rear) {
- front = -1;
- rear = -1;
- } else {
- front = (front + 1) % MAX_SIZE;
- }
- return data;
- }
- #include
- #define MAX_SIZE 100
-
- int queue[MAX_SIZE];
- int front = -1;
- int rear = -1;
-
- int isEmpty() {
- return front == -1;
- }
-
- int isFull() {
- return (rear + 1) % MAX_SIZE == front;
- }
-
- void enqueue(int data) {
- if (isFull()) {
- printf("Queue is full. Cannot enqueue element.\n");
- return;
- }
- if (isEmpty()) {
- front = 0;
- }
- rear = (rear + 1) % MAX_SIZE;
- queue[rear] = data;
- }
-
- int dequeue() {
- if (isEmpty()) {
- printf("Queue is empty. Cannot dequeue element.\n");
- return -1;
- }
- int data = queue[front];
- if (front == rear) {
- front = -1;
- rear = -1;
- } else {
- front = (front + 1) % MAX_SIZE;
- }
- return data;
- }
-
- int main() {
- enqueue(10);
- enqueue(20);
- enqueue(30);
-
- printf("Dequeued element: %d\n", dequeue());
- printf("Dequeued element: %d\n", dequeue());
-
- return 0;
- }
enqueue(10)
将元素 10 入队。enqueue(20)
将元素 20 入队。enqueue(30)
将元素 30 入队。dequeue()
出队并打印出队的元素。dequeue()
出队并打印出队的元素。