C语言链队列的基本操作(test)

  1. 创建头结点,初始化。
  2. 入队。
  3. 出队。
  4. 取队头元素。
  5. 遍历。

在这里插入图片描述
注:1.根据队列的入队,出队规则,设置头结点便于实现出队操作;
2.头指针front始终指向头结点,尾指针rear指向队列最后一个元素,length用于记录队列中元素个数,遍历操作会用到length。

#include <stdio.h>
#include <stdlib.h>

typedef int dataType;

typedef struct Node
{
	dataType data;
	struct Node *next;
}QueueNode;

typedef struct
{
	QueueNode *front;
	QueueNode *rear;
	int length;
}LinkQueue;

int create(LinkQueue *q)
{
	q->front=q->rear=(QueueNode *)malloc(sizeof(QueueNode));
	q->front->next=NULL;
	q->front->data=0;
	q->length=0;
	return;
}

int push_in(LinkQueue *q,dataType value)
{
	QueueNode *p;
	
	p=(QueueNode *)malloc(sizeof(QueueNode));
    p->data=value;
    p->next=NULL;
    q->length++;
    
    q->rear->next=p;
    q->rear=p;
	return; 
}

int pop_out(LinkQueue *q,dataType *value)
{
    QueueNode *p;
    
    if(q->front->next==NULL)
    {
    	printf("LinkQueue is Empty!\n");
    	return;
	}
	
    p=q->front->next;
	*value=p->data;
    q->front->next=p->next;
    q->length--;
    printf("Pop Element is %d.\n",*value);
    free(p);
	return;
}

dataType getHead(LinkQueue *q)
{
	if(q->front->next==NULL)
    {
    	printf("LinkQueue is Empty!\n");
    	return;
	}
	return(q->front->next->data); //q->front指向头结点,头结点的next才指向第一个元素的结点
}

int traverse(LinkQueue *q)
{
	QueueNode *p;
	int i;
	
	if(q->front->next==NULL)
    {
    	printf("LinkQueue is Empty!\n");
    	return;
	}
	
	p=q->front->next;
	printf("Head -> ");
	for(i=0;i<q->length;i++)
	{
     	printf("%d -> ",p->data);
	    p=p->next;
	}
	printf("NULL\n");
	return;
}

int main()
{
	LinkQueue q;
	int i;
	dataType value;
	create(&q);
	for(i=1;i<10;i++)
	push_in(&q,i);
	traverse(&q);
	printf("\n");
	for(i=1;i<10;i++)
	{
	pop_out(&q,&value);
	printf("First Element is %d.\n",getHead(&q));
	traverse(&q);
	printf("\n");
	}
	
	return 0;
}

执行结果:
在这里插入图片描述

发布了7 篇原创文章 · 获赞 7 · 访问量 244

猜你喜欢

转载自blog.csdn.net/Attract1206/article/details/105457765