c语言编程安全队列,C语言编程队列的实现

queue.c

功能函数:

#include "queue.h"

static void CopyToNode(Item item,Node *pn)

{

pn->item = item;

}

static void CopyToItem(Node *pn, Item *pi)

{

*pi = pn->item;

}

/* 把队列初始化为空,就是设置尾指针为NULL并设置项数(items成员)为0 */

void InitializeQueue(Queue *pq)

{

pq->front = pq->rear = NULL;

pq->items = 0;

}

bool QueueIsFull( const Queue *pq)

{

return (pq->items == MAXQUEUE);

}

bool QueueIsEmpty( const Queue *pq)

{

return (pq->items == 0);

}

int QueueItemCount(const Queue *pq)

{

return pq->items;

}

bool EnQueue( Item item,Queue *pq)

{

Node * pnew;

if (QueueIsFull(pq))

{

return false;

}

pnew = (Node *)malloc(sizeof(Node));

if (pnew == NULL)

{

fprintf(stderr, "Unable to allocate memory!\n");

exit(1);

}

CopyToNode(item,pnew);

pnew->next = NULL;

if (QueueIsEmpty(pq))

{

pq->front = pnew;/* 项目位于队列首端 */

}

else

{

pq->rear->next = pnew;/* 链接到队列尾端 */

}

pq->rear = pnew;/* 记录队列尾端的位置 */

pq->items++;/* 队列项目个数增1 */

return true;

}

bool DeQueue( Item *pitem, Queue *pq)

{

Node *pt;

if (QueueIsEmpty(pq))

{

return false;

}

CopyToItem(pq->front,pitem);

pt = pq->front;

pq->front = pq->front->next;

free(pt);

pq->items--;

if (pq->items == 0)

{

pq->rear = NULL;

}

return true;

}

void EmptyTheQueue(Queue *pq)

{

Item dummy;

while (!QueueIsEmpty(pq))

{

DeQueue(&dummy,pq);

}

}

测试程序:

#include "queue.h"

int main(void)

{

Queue line;

Item temp;

char ch;

InitializeQueue(&line);

puts("Testing the queue interface, type a to add a value,");

puts("type d to delete a value ,and type q to quit");

while((ch =getchar())!= 'q')

{

if (ch !='a' && ch != 'd')

{

continue;

}

if (ch == 'a')

{

printf("integer to add:\n");

scanf("%d",&temp);

if (!QueueIsFull(&line))

{

printf("Putting %d into queue\n",temp);

EnQueue(temp,&line);

}

else

{

puts("Queue is full");

}

}

else

{

if (QueueIsEmpty(&line))

{

puts("没有了");

}

else

{

DeQueue(&temp,&line);

printf("删除了%d\n",temp);

}

}

printf("%d item in queue\n",QueueItemCount(&line));

puts("type a to add ,d to delete, q to quit:");

}

EmptyTheQueue(&line);

puts("bye!");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值