C语言链队列

链队列类似于单链表,为了限制只能从两端操作数据,其结构体内有2个指针分别指向头尾,但队列里的节点用另一种结构体来表示,头尾指针则为指向该结构体的类型。只能通过操作头尾指针来操作队列

 1 typedef int elemtype;
 2 
 3 typedef struct QueueNode{
 4     elemtype date;
 5     struct QueueNode *next;
 6 }LinkQueueNode;
 7 typedef struct LQueue{
 8     LinkQueueNode *front;
 9     LinkQueueNode *rear;
10 }LinkQueue;

初始化链队列 

 1 LinkQueue *init_LinkQueue(){
 2     
 3     LinkQueueNode *node = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
 4     LinkQueue *queue = (LinkQueue *)malloc(sizeof(LinkQueue));
 5     
 6     //front、rear初始化时都指在头结点 
 7     if(node!=NULL && queue!=NULL){
 8         node->next = NULL;
 9         queue->front = node;
10         queue->rear = node;
11         return queue;
12     }
13     return NULL;
14 }

 

链队列只要有内存空间就会不溢出,判断空的条件是头尾指针相同

1 int Empty_LinkQueue(LinkQueue *p){
2     
3     if(p->front == p->rear)
4         return 1;
5         
6     return 0;
7     
8 }

入队和出队要特别注意只能通过操作头尾指针来操作队列

 1 int delete_LinkQueue(LinkQueue *p,elemtype *e){
 2     
 3     if(p->front == p->rear)
 4         return 0;
 5     
 6     LinkQueueNode *node = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
 7     
 8     node = p->front->next;
 9     *e = node->date;
10     p->front = node;
11     
12     if(node == p->rear)
13         p->rear = p->front;
14     free(node);
15     return 1;
16     
17 }
18 
19 int Entry_LinkQueue(LinkQueue *p,elemtype e){
20     
21     LinkQueueNode *node = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
22     if(node == NULL)
23         return 0;
24         
25     node->date = e;
26     node->next = NULL;
27     p->rear->next = node;
28     p->rear = node;
29     return 1;
30     
31 }

 

posted @ 2018-11-28 11:31  捞的不谈  阅读(369)  评论(0编辑  收藏  举报