隊列先進先出的數據結構,下面是隊列的簡單c語言實現。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
int gflag = 0;//標識對空隊列的操作
int length(Node *head)
{
int count = 0;
while(head!=NULL)
{
count++;
head = head->next;
}
return count;
}
void enqueue(Node** queue,const int data)
{
if(queue==NULL)
{
fprintf(stdout,"null queue");
gflag = -1;
return ;
}
Node *p = *queue;
if(p==NULL)
{
*queue = (Node*)malloc(sizeof(Node));
(*queue)->data = data;
(*queue)->next = NULL;
return ;
} else { //p不爲空,則找到尾結點
int len = length(p);
for(int i=0;i<len-1;i++)
{
p = p->next;
}
p->next = (Node*)malloc(sizeof(Node));
p->next->data = data;
p->next->next = NULL;
}
}
int dequeue(Node** queue)
{
if(queue==NULL)
{
fprintf(stdout,"null queue");
gflag = -1;
return -1;
}
Node* p = *queue;
if(p==NULL)
{
printf("queue is null ");
gflag = -1;
return -2;
}
int len = length(p);
int ret = 0;
if(len==1)
{
ret = p->data;
free(p);
*queue = NULL;
} else {
*queue = p->next;
ret = p->data;
free(p);
}
return ret;
}
void print(Node* head)
{
while(head!=NULL)
{
fprintf(stdout,"%d ",head->data);
head = head->next;
}
}
int main(void)
{
Node *head = NULL;
enqueue(&head,12);
enqueue(&head,13);
enqueue(&head,14);
print(head);
printf("\n");
printf("%d ",dequeue(&head));
printf("%d ",dequeue(&head));
printf("%d ",dequeue(&head));
printf("%d ",dequeue(&head));
printf("\n");
return 0;
}