首页 > 其他 > 详细

链队列C实现

时间:2014-04-05 20:51:11      阅读:650      评论:0      收藏:0      [点我收藏+]

整理过后,思路很清晰。

队列的单链表存储结构:

typedef struct node
{
    int data;
    struct node *next;
}queue_node, *queue;
typedef struct
{
    queue front;
    queue rear;
}link_queue;

熟悉每种数据结构的存储结构,实现起来才不会觉得困难。

下面是实现代码:

#include<stdio.h>
#include<malloc.h>
#define OK 0
#define ERROR   -1
#define OVERFLOW 1
#define TRUE     1
#define FALSE    0
typedef struct node
{
    int data;
    struct node *next;
}queue_node, *queue;
typedef struct
{
    queue front;
    queue rear;
}link_queue;
int init_queue(link_queue *q)
{
    q->rear = (queue)malloc(sizeof(queue_node));
    if(!q->rear)
        exit(OVERFLOW);
    q->rear->next = NULL;
    q->front = q->rear;
    return OK;
}
int empty(link_queue q)
{
    if( q.rear == q.front)
        return TRUE;
    else
        return FALSE;
}
int enqueue(link_queue *q, int e)
{
    queue p;
    p = (queue)malloc(sizeof(queue_node));
    if(!p)
        exit(OVERFLOW);
    p->data  = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return OK;
}
int dequeue(link_queue *q, int *e)
{
    queue p;
    if(q->rear == q->front)
        return ERROR;
//  *e = q->front->data;
    p = q->front->next;
    *e = p->next->data;
    q->front->next = p->next;
    if(q->rear == p)
        q->rear = q->front;
    free(p);
    return OK;
}
int get_front(link_queue q, int *e)
{
    queue p;
    if(q.rear == q.front)
        return ERROR;
    *e = q.front->data;
    return OK;
}
int destroy_queue(link_queue * q)
{
    queue p;
    while(q->front)
    {
        q->rear = q->front->next;
        free(q->front);
        q->front = q->rear;
    }
    return OK;
}
int main()
{
    link_queue q;
    int e1, e2;
    int i;
        
    printf("init_queue\n");
    init_queue(&q);
    printf("enqueue\n");
    for(i = 1; i < 10; i++)
    {
        if (enqueue(&q, i) == OK);
            printf("%3d", i);
    }
    printf("\n");
        
    printf("dequeue\n");
    dequeue(&q, &e1);
    printf("dequeue: %d\n", e1);
        
    printf("get_front\n");
    get_front(q, &e2);
    printf("get front:%d\n", e2);
        
    if (empty(q))
        printf("empty!\n");
    else
        printf("not empty\n");
    if (destroy_queue(&q) == OK)
        printf("destroyed!\n");
    return 0;
}

   主函数设计的比较简单,但不是重点。

本文出自 “兵疯千里” 博客,请务必保留此出处http://slientradio.blog.51cto.com/7241495/1390869

链队列C实现,布布扣,bubuko.com

链队列C实现

原文:http://slientradio.blog.51cto.com/7241495/1390869

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!