数据结构:用C语言实现队列及一些基本操作

**

数据结构:带头节点的链队列

**
1.头文件包含及结构体定义

#include
#include

#define ElemType int


typedef struct LinkNode{
     
	ElemType data;
	LinkNode *next;
} LinkNode;


typedef struct 
{
     
	LinkNode *front,*rear;
}LinkQueue;

2.初始化

bool InitQueue(LinkQueue & Q)
{
     
	Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));

	if (Q.front == NULL)
		return false;
	else
		Q.front->next = NULL;
	return true;
}

3.判断是否为空

bool QueueEmpty(LinkQueue Q) {
     
	if (Q.rear == Q.front)//或者Q.front->next == NULL
		return true;
	else
		return false;

}

4.入队

//4.入队
bool EnQueue(LinkQueue  &Q, ElemType x)
{
     
	LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
	if (s == NULL)
		return false;
	s->data = x;
	s->next = NULL;//1.指向NULL
	Q.rear->next = s;//2.rear指向s,插入的表尾
	Q.rear = s;//3.rear指向表尾
	return true;
}

5.出队

//5出队
bool DeQueue(LinkQueue &Q, ElemType &x)
{
     
	//判断是否为空*******
	if (Q.rear == Q.front)
		return false;

	LinkNode *s = Q.front->next;//指向第一个元素
	x = s->data;//读出第一个元素值
	
	Q.front->next = s->next;//指向第二个元素

	if (s == Q.rear)
		Q.rear = Q.front;
	free(s);

	return true;
}

6.获取队首

//6.获取队首
bool GetHead(LinkQueue &Q, ElemType &x)
{
     
	//判断是否为空*******
	if (Q.rear == Q.front)
		return false;

	
	x = Q.front->next->data;//读出队头

	return true;
}

7.获取长度

//7.获取长度
int GetLength(LinkQueue & Q)
{
     
	int i=0;
	LinkNode *s = Q.front;
	while (s!=Q.rear)
	{
     
		s = s->next;
		i++;
	}
	return i;
}

8。简单测试

int main()
{
     
	printf("测试\n\n");
	LinkQueue Q;
	InitQueue(Q);
	int e = 0;
	for(int i = 0;i < 10;i++)
		EnQueue(Q, i); 

	for (int i = 0; i < 5; i++)
	{
     	
		
		if(DeQueue(Q, e))
		printf("%d  ", e);
	}
	printf("\n长度:%d\n",GetLength(Q));
	for (int i = 0; i < 10; i++)
		EnQueue(Q, i);

	for (int i = 0; i < 10; i++)
	{
     

		if (DeQueue(Q, e))
			printf("%d  ", e);
	}

	printf("\n\n");


	EnQueue(Q, 99);
	if (GetHead(Q, e))
		printf("%d  ", e);
	return 0;
}

你可能感兴趣的:(数据结构,队列,c++,c算法)