码迷,mamicode.com
首页 > 其他好文 > 详细

栈和队列

时间:2017-09-02 23:26:33      阅读:280      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!