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

数据结构队列1230

时间:2016-12-30 21:49:38      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:指针   变化   free   queue   顺序   ext   改变   str   常用   

  队列既可以用链表实现,也可以用顺序表实现。跟栈相反的是,栈一般用顺序表来顺序表来实现,而队列常用链表来实现,简称为链队列。

typedef struct QNode
{
ElemType  data;
struct QNode *node;
}QNode, *QueuePrt;
typedef struct
{
QueuePrt front, rear; //队头,尾指针
}LinkQueue;

    将队头指针指向链队列的头结点,而队尾指针指向终端节点。头结点不是必要的。

    创建一个队列要完成两个任务,一是在内存中创建一个头结点,二是将队列的头指针和尾指针都指向这个生成的头结点,因为此时是空队列。

initQueue(LinkQueue *q)
{
q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!q->fronot)
exit(0);
q->front->next=NULL;
}

    入队列操作:

insertQueue(LinkQueue *q, ElemType e)
{
QueuePtr p;
p=(QueuPtr)malloc(sizeof(QNode));
if(p==NULL)
exit(0);
p->data=e;
p=>next=NULL;
q->rear->next=p;
q->rear=p;
}

    出队列是将队列中的第一个元素移出,队头指针不发生变化,改变头结点的next指针即可。如果原队列只有一个元素,就应该处理一下对尾指针。

DeleteQueue(LinkQueue *q,ElemType *e)
{
QueuePtr p;
if(q->front == q->rear)
return;
p=q->front->next;
*e=p->data;
q->front->next=p->next;
if(q->rear==p)
q->rear=q->front;
free(p);
}

    由于链队列建立在内存的动态区,因此当一个队列不再有用时应当把它及时销毁掉。

DestroyQueue(LinkQueue *q)
{
while(q->front)
{
q->rear=q->front->next;
free(q->front);
q->front=q->rear;
}
}

 

数据结构队列1230

标签:指针   变化   free   queue   顺序   ext   改变   str   常用   

原文地址:http://www.cnblogs.com/nicoleforbrandnew/p/6238311.html

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