yuprxk 发表于 2012-6-18 11:38:17

关于 队列 的基本操作,欢迎大家打拍砖

本帖最后由 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);      //不用了,就要销毁
}

懑道 发表于 2012-6-18 15:57:29

{:2_29:}   咋没有注释?
看的很费尽
编码 也有问题 {:2_27:}

yuprxk 发表于 2012-6-18 17:39:22

懑道 发表于 2012-6-18 15:57 static/image/common/back.gif
咋没有注释?
看的很费尽
编码 也有问题

注释我已经修改,编码哪里有问题,请指正。

cathe 发表于 2012-8-4 10:27:35

赞一个。。

Cocol 发表于 2013-7-2 12:08:30

看看老帖,支持下

我挖 发表于 2013-7-4 18:46:39

再看看,回帖支持支持

monk-half 发表于 2013-7-8 15:25:14

支持一下。。争取自己做出
页: [1]
查看完整版本: 关于 队列 的基本操作,欢迎大家打拍砖