鱼C论坛

 找回密码
 立即注册
查看: 4121|回复: 6

[技术交流] 关于 队列 的基本操作,欢迎大家打拍砖

[复制链接]
发表于 2012-6-18 11:38:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yuprxk 于 2012-6-18 17:38 编辑

/*linkqueue.h*/
#include <stdio.h>
#include <stdlib.h>

#define                        FALSE                        0
#define                        TRUE                        1
typedef                        int                        BOOL;
typedef                        int                ELEMENTTYPE;
typedef        struct tag_NODE
{
        ELEMENTTYPE data;
        struct tag_NODE * next;
}NODE, *PNODE;
typedef        struct tag_LINKQUEUE
{
        PNODE        front;
        PNODE        rear;
}LINKQUEUE, *PLINKQUEUE;

BOOL LinkQueueInit (PLINKQUEUE pLinkQueue)
{
        PNODE pHeader = (PNODE) malloc (sizeof (NODE));
        if (!pHeader)
        {
                printf ("LinkQueueInit: pHeader\n");
                return FALSE;
        }
        pHeader->data = 0;        //用作队列的长度,虽然程序没有用到
        pHeader->next = NULL;
        pLinkQueue->front        = pHeader;
        pLinkQueue->rear        = pHeader;
        return TRUE;
}
BOOL LinkQueueIn (PLINKQUEUE pLinkQueue, ELEMENTTYPE elementValue)
{
        PNODE pNode = (PNODE) malloc (sizeof (NODE));
        if (!pNode)
        {
                return FALSE;
        }
        pNode->data = elementValue;
        pNode->next = NULL;
        pLinkQueue->rear->next = pNode;
        pLinkQueue->rear = pNode;
        pLinkQueue->front->data ++;
        return TRUE;
}
BOOL        LinkQueueOut (PLINKQUEUE pLinkQueue, ELEMENTTYPE * pElementValue)
{
        PNODE pOut;
        if (pLinkQueue->rear == pLinkQueue->front)        //要出队,必需确保队中有元素可出
        {
                return FALSE;
        }
        pOut = pLinkQueue->front->next;
        if (pElementValue)
        {
                *pElementValue = pOut->data;
        }
        pLinkQueue->front->next = pOut->next;
        free (pOut);
        if (! pLinkQueue->front->next)        //若删除后,队列为空,则改变rear的指向
        {
                pLinkQueue->rear = pLinkQueue->front;
        }
        pLinkQueue->front->data --;
        return TRUE;
}
void LinkQueueDestroy (PLINKQUEUE pLinkQueue)
{
        PNODE        q;
        PNODE p = pLinkQueue->front;
        while (p)
        {
                q = p->next;
                free (p);
                p = q;
        }
}
void LinkQueueShow (const PLINKQUEUE pLinkQueue)
{
        PNODE p = pLinkQueue->front->next;
        while (p)
        {
                printf (" %d ", p->data);
                p = p->next;
        }
}
//简单的测试

#include "linkqueue.h"
int main ()
{
        int                        i;
        LINKQUEUE lq;
        LinkQueueInit (&lq);        //初始化

        for (i = 0; i < 9; i++)
        {
                LinkQueueIn (&lq, i);
                LinkQueueShow (&lq);//每次入队的时候,都能立即看到结果
                printf ("\n");
        }
        LinkQueueOut (&lq, NULL);        //出队
        LinkQueueShow (&lq);
        printf ("\n");
        LinkQueueDestroy (&lq);        //不用了,就要销毁
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-18 15:57:29 | 显示全部楼层
{:2_29:}   咋没有注释?
看的很费尽
编码 也有问题 {:2_27:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-18 17:39:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-4 10:27:35 | 显示全部楼层
赞一个。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-7-2 12:08:30 | 显示全部楼层
看看老帖,支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 18:46:39 | 显示全部楼层
再看看,回帖支持支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-8 15:25:14 | 显示全部楼层
支持一下。。争取自己做出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表