隊列(c實現)

隊列先進先出的數據結構,下面是隊列的簡單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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章