QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1388|回复: 1

菜鸟图解队列(表打我哈)

[复制链接]
发表于 2004-3-19 15:16:58 | 显示全部楼层 |阅读模式
队列的顺序实现(循环)
循环表即设想数组的首尾相连:sq.data[0]接在sq.data[maxsize-1]之后.
入对操作为:
sq.rear=(sq.rear+1)%maxsize;
出队操作为:
sq.front=(sq.front+1)%maxsize;
队满条件:
((sq.rear+1)%maxsize)==sq.front;
队空条件:
sq.rear==sq.front;

[code:1]

/*类型定义*/

#define maxsize 8

typedef struct cycqueue
{
    int data[maxsize];
    int front, rear;
} CycqueueTp;
CycqueueTp sq;

/*队列的初始化*/

int InitCycQueue(CycqueueTp *sq)
{
     sq->front = 0;
     sq->rear=0;
}

/*入对列*/

int EnCycQueue(CyequeuTp *sq, int x)
{
    if((sq->next+1)%maxsize==sq->front)
        {
            printf("队满\n");
            return (0);
        }
    else
        {
            sq->rear=(sq->rear+1)%maxsize;
            sq->data[sq->rear]=x;
            return (1);
        }
}

/*出队列*/
int OutCycQueue (CycqueueTp *sq, int *x)
{
      if((sq->front==sq->rear)
         {
             printf("队空\n");
             return (0);
         }
      else
         {
             sq->front=(sq->front+1)%maxsize;
             *x=sq->data[sq->front];
             return (1);
         }
}

/*判队空*/

int EmptyCycQueue(CycqueueTp sq)
{
     if (sq.rear==sq.front)
             return 1;
     else
             return 0;
}

/*取队头*/

int GetHead(CycqueueTp sq, int *x)
{
      if(sq.rear==sq.front)
          return 0;
      else
          {
             *x=sq.data[(sq.front+1)%maxsize];
             return 1;
          }
}

[/code:1]

  [/url]

本帖子中包含更多资源

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

×
 楼主| 发表于 2004-3-19 15:32:40 | 显示全部楼层
队列的链接实现

[code:1]

/*类型定义*/

typedef struct linked_queue
{
    int data;
    struct linked_queue *next;
} LqueueTp;

typedef struct queueptr
{
   LqueueTp *front , *next;
} QueptrTp;
QueptrTp lq;


*/队列的初始化*/

int InitQueue(QueptrTp *lq)
{
    LqueueTp *p;
    p=(LqueueTp *)malloc(sizeof(LqueueTp));
    lq->front=p;
    lq->rear=p;
    (lq->front)->next=NULL;
}

*/入队列*/

int EnQueue(QueptrTp *lq, int x)
{
    LqueueTp *p;
    p=(LqueueTp *)malloc(sizeof(LqueueTp));
    p->data=x;
    p->next=NULL;
    (lq->rear)->next=p;
    lq->rear=p;
}

*/出队列*/

int OutQueue(QueptrTp *lq, int *x)
{
   LqueueTp *s;
   if(lq->front==lq->rear)
     {
       printf("队空");
       return 0;
     }
   else
     {
       s=(lq->front)->next;
       *x=s->data;
       (lq->front)->next=s->next;
       if(s->next==NULL)
              lq->rear=lq->front;
       free(s);
       return 1;
}

/*判队空*/

int EmptyQueue(QueptrTp lq)
{
    if(lq.rear==lq.front)
         return 1;
    else
         return 0;
}

/*读队头元素*/

int GetHead(QueptrTp lq, int *x)
{
   LqueueTp *p;
   if(lq.rear==lq.front)
         return 0;
   else
        {
           p=lq.front->next;
           *x=p->data;
           return 1;
        }
}

[/code:1][/url]

本帖子中包含更多资源

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

×
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-8 18:48 , Processed in 0.046835 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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