队列的思想是先进先出,基于对链表的操作的理解,可以把先进先出转换为链表的尾插法和从第一个结点开始删除的思想。代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}Node;
struct Node * queueInit()
{
Node* head=(Node*)malloc(sizeof(Node));
head->data=0;
head->next=NULL;
return head;
}
void tailInsert(Node* list,int data) //尾插法入队
{
Node* temp=list->next;
Node* node=(Node*)malloc(sizeof(Node));
node->data=data;
if(list->data==0)
{
node->next=list->next;
list->next=node;
list->data++;
}
else
{
while(temp->next)
{
temp=temp->next;
}
node->next=temp->next;
temp->next=node;
list->data++;
}
}
int outQueue(Node* list) //出队
{
if(list->data==0)
{
printf("queue is empty!\n");
return 0;
}
else
{
Node* temp=list->next;
list->next=temp->next;
return temp->data;
}
}
void print(Node *list)
{
Node* temp=list->next;
printf("List: ");
while(temp)
{
printf("%d--->",temp->data);
temp=temp->next;
}
printf("NULL\n");
}
int main(int argc,char *argv[])
{
int a;
struct Node* list=queueInit();
tailInsert(list,1);
print(list);
tailInsert(list,2);
print(list);
tailInsert(list,3);
print(list);
tailInsert(list,4);
print(list);
tailInsert(list,5);
print(list);
a=outQueue(list);
printf("out of queue:%d\n",a);
print(list);
a=outQueue(list);
printf("out of queue:%d\n",a);
print(list);
a=outQueue(list);
printf("out of queue:%d\n",a);
print(list);
a=outQueue(list);
printf("out of queue:%d\n",a);
print(list);
a=outQueue(list);
printf("out of queue:%d\n",a);
print(list);
}