-------------------------------------------------------------------------------------------
前言:
前几天做了海康威视的笔试题,正好大题遇上了用C语言编程实现队列的入队和出队功能;于是考完后就自己调试当时所写的代码,错误颇多,经过几小时的努力调试成功,特定发到博客上分享给大家。
-------------------------------------------------------------------------------------------
队列:就跟排队买饭一样,先到者先买饭,买完就离开,后来的人只能排队,也就是先进先出;因此,本次编程我以链表的形式来实现题目需求;
那这么表示一个队列的头和尾呢?这里,我们引入2指针,分别是指向第一个节点的头指针,指向尾节点的尾指针,那如何移动呢?你可以想一下,买饭的时候是一个接一个的排队,但是买饭的窗口是固定的,你只有到窗口,阿姨才问你吃什么饭,然后打菜给你,拿到了饭你也就走了,轮到下一个人买,也就是说指针pTailNode一直向后移,而pHeadNode一直在处理这些人所需要处理的事情,所以说先进先出的这个道理。再简单一句话,你pTailNode一直在给pHeadNode找麻烦,而pHeadNode又像爸爸一样给你搽屁股的解决这些事;
下面是代码流程:
结构体定义如下:
typedef struct _QUEUE_NODE_ //一个节点的结构体
{
struct _QUEUE_NODE_ *pNextNode;
int data;
}QUEUE_NODE,*PQUEUE_NODE;
说明:
1.海康威视里面存放的数据是void *类型,本实验就用简单的int 类型来代替;
2.定义一个结构体类型名为_QUEUE_NODE_,并且用该结构体类型名命名一个叫QUEUE_NODE,它等价于QUEUE_NODE = struct _QUEUE_NODE_ ,而*PQUEUE_NODE呢?
同样,*PQUEUE_NODE = (struct _QUEUE_NODE_ *),所以调用时只需QUEUE_NODE,PQUEUE_NODE即可;
3.该结构体中含有1个数据类型,1个结构体指针类型(用于连接下一个节点);
typedef struct QUEUE //链表的结构体
{
QUEUE_NODE *pHeadNode;
QUEUE_NODE *pTailNode;
}QUEUE_HANDLE,*PQUEUE_HANDLE;
说明:
1.海康威视