标签:stdio.h fine top return 执行时间 队列实现 使用数组 over 测试
栈实现的是一种后进先出(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; }
标签:stdio.h fine top return 执行时间 队列实现 使用数组 over 测试
原文地址:http://www.cnblogs.com/yanxin880526/p/7468180.html