栈和队列
Posted foreverys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。
栈实现的是一种后进先出(last in, first-out, LIFO)策略。
本文利用数组实现了栈的三种操作:
PUSH(压入,即INSERT)
POP(弹出,即DELETE)
EMPTY(测试栈是否为空)
三种栈操作的执行时间都为O(1)
#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 int top=0; int stack_empty(int s[]); int push(int s[], int x); int pop(int s[]); int main(void) { int s[10]; if(stack_empty(s)) { printf("the stack is empty!\\n"); } else { printf("the stack is not empty!\\n"); } push(s,9); push(s,12); printf("pop %d\\n",pop(s)); printf("pop %d\\n",pop(s)); } int stack_empty(int s[]) { if(top==0) return TRUE; else return FALSE; } int push(int s[], int x) { s[++top] = x; } int pop(int s[]) { if(stack_empty(s)) { printf("underflow.\\n"); exit(1); } else { return s[top--]; } }
队列实现的是一种先进先出(first-in, first-out, FIFO)策略。
本例使用数组实现了循环队列,示意图如下:
它有下面2个操作
ENQUEUE(入队,即INSERT)
DELETE(出队,即DELETE)
两种操作的执行时间都为O(1)
/* * 利用数组实现循环队列 */ #include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE 10 void enqueue(int queue[], int x); int dequeue(int queue[]); int head,tail; int queue[ARRAY_SIZE]; int main(void) { enqueue(queue, 25); enqueue(queue, 37); enqueue(queue, 12); printf("%d\\n", dequeue(queue)); printf("%d\\n", dequeue(queue)); printf("%d\\n", dequeue(queue)); printf("%d\\n", dequeue(queue)); } void enqueue(int q[], int x) { if(tail+1 == head) { printf("queue is overflow!\\n"); exit(1); } q[tail] = x; if(tail == ARRAY_SIZE-1) tail=0; else tail++; } int dequeue(int q[]) { int x; if(tail == head) { printf("queue is underflow!\\n"); exit(1); } x = q[head]; if(head == ARRAY_SIZE-1) head=0; else head++; return x; }
以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章