今天学习了队列,因为前面写了好几个链表实现的数据结构基本上都懂了,然后大致了解了一下队列的特点,便决定用自己的理解来实现一个,然后实现了。

  (2018-02-14 代码更新)

  Head file:

#ifndef __LINKQUEUE_H_
#define __LINKQUEUE_H_ #define bool int
#define true 1
#define false 0 typedef int KeyType; typedef struct node
{
struct node * next;
KeyType key;
}Node; typedef struct queue
{
Node * front;
Node * rear;
int nums;
}Queue; Queue * CreateLinkQueue();
bool QueueIsEmpty();
int QueueItemCount();
bool QueueAdd();
bool QueueRemove();
Node* GetQueueFrontNode();
Node* GetQueueRearNode();
KeyType GetQueueFront();
KeyType GetQueueRear();
void TraverseQueue();
void Clear();
void Destroy(); #endif

  LinkQueue.c:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "lqueue.h" //建立链队
Queue * CreateLinkQueue(void)
{
Queue * p; p = (Queue*)malloc(sizeof(Queue));
p->front = p->rear = NULL;
p->nums = 0; return p;
} //判断队列是否为空
bool QueueIsEmpty(Queue * p)
{
return p->nums == 0;
} //返回当前队列个数
int QueueItemCount(Queue * p)
{
return p->nums;
} //入队
bool QueueAdd(Queue * p, KeyType DATA)
{
Node * s; s = (Node*)malloc(sizeof(Node));
s->key = DATA;
s->next = NULL;
if(QueueIsEmpty(p))
p->front = s;
else
p->rear->next = s;
p->rear = s;
p->nums++;
return true;
} //出队
bool QueueRemove(Queue * p)
{
Node * s; if(QueueIsEmpty(p))
return false;
s = p->front;
p->front = p->front->next;
free(s);
p->nums--;
return true;
} //返回队首节点
Node* GetQueueFrontNode(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->front;
} //返回队尾节点
Node* GetQueueRearNode(Queue * p)
{
if(QueueIsEmpty(p))
return false;
return p->rear;
} //返回队首
KeyType GetQueueFront(Queue * p)
{
return GetQueueFrontNode(p)->key;
} //返回队尾
KeyType GetQueueRear(Queue * p)
{
return GetQueueRearNode(p)->key;
} //遍历队列
void TraverseQueue(Queue * p)
{
Node*s = GetQueueFrontNode(p);
while(s != NULL)
{
printf("%d ", s->key);
s = s->next;
}
printf("\n");
} //清空队列
void Clear(Queue * p)
{
while(!QueueIsEmpty(p))
QueueRemove(p);
} //销毁队列
void Destroy(Queue * p)
{
if(p != NULL)
{
Clear(p);
free(p);
p = NULL;
}
}

  

最新文章

  1. 如何发布付费WP8应用
  2. thrift之TTransport层的堵塞的套接字I/O传输类TSocket
  3. Loadrunner教程读后感-VuGen
  4. VT100字体
  5. WCF学习笔记(1)——Hello WCF
  6. Apache RewriteCond RewriteRule 入门和Laravel去掉index.php
  7. MSXML2;System.ServiceModel.Configuration;对应dll的添加方法
  8. Myeclipse使用git
  9. qt 多语化
  10. kotlin电商学习记录,好久没来逛逛了
  11. python基础知识14---迭代器、生成器、面向过程编程
  12. bochs的bochsrc说明
  13. IDEA将项目上传至码云/GitHub托管
  14. Ubuntu下使用sublime text进行py开发
  15. 查询sql数据库中表占用的空间大小
  16. Django的rest_framework的视图之基于通用类编写视图源码解析
  17. 请找出至少一个由递推关系 a(i) = a(i – 1) + a(i – 2) 生成的数列,使得当 n 趋于 (√5+1)/2的数列
  18. SQLserver 还原数据库报“指定转换无效”的错的解决方案
  19. Keepalived安装后出现的问题总结
  20. UVa 1471 防线

热门文章

  1. jmeter的使用---用户变量
  2. FreeRTOS学习笔记5:队列
  3. AndroidStudio3.3+OpenCV开发环境搭建
  4. [已解决]Mac 升级至10.15 VM 出现黑屏等
  5. zabbix-agent不能启动:配置文件出现特殊字符导致
  6. HashSet HashMap 源码阅读笔记
  7. unittest 测试套件使用汇总篇
  8. Django - 美化显示request.META
  9. java8date
  10. 操作word