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!");
}
總結
以上是生活随笔為你收集整理的c语言编程安全队列,C语言编程队列的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode写java没有提示_VS C
- 下一篇: c语言编程求连续几日的温差最大 最小值,