鏈表實現隊列
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node;
node *head = NULL;
node *mk_node(int data)
{
node *p = (node*)malloc(sizeof(node));
if(p == NULL)
{
printf("malloc fair");
exit(1);
}
p->data = data;
return p;
}
int head_insert(node *p)
{
p->next = head;
head = p;
}
int traverse()
{
node *pre = head;
while(pre != NULL)
{
printf("%d ",pre->data);
pre = pre->next;
}
printf("\n-----------------\n");
}
node *find_item(int data)
{
node *pre = head;
while(pre != NULL)
{
if(pre->data == data)
{
return pre;
}
pre = pre->next;
}
return NULL;
}
int delete_node(node *p)
{
if(head == p)
{
head = head->next;
return 1;
}
node *pre = head;
while(pre->next != NULL)
{
if(pre->next = p)
{
pre->next = p->next;
free_node(p);
return ;
}
pre = pre->next;
}
return NULL;
}
int destroy()
{
node *pre = head;
node *p = NULL;
while(pre != NULL)
{
p = pre->next;
free_node(pre);
pre = p;
}
return ;
}
int free_node(node *p)
{
free(p);
}
int is_empty()
{
if(head == NULL)
{
return 1;
}else
{
return 0;
}
}
int enqueue(int data)
{
node *p = mk_node(data);
if(head == NULL)
{
p->next = head;
head = p;
return ;
}
node *tail = head;
while(tail->next != NULL)
{
tail = tail->next;
}
p->next = tail->next;
tail->next = p;
}
int dequeue()
{
node *pre = head;
head = head->next;
int data = pre->data;
free_node(pre);
return data ;
}
int main()
{
enqueue(1);
enqueue(2);
enqueue(3);
enqueue(4);
traverse();
while(!is_empty())
{
printf("dequeue(): %d \n",dequeue());
}
printf("\n");
return 0;
}