C/C++链式队列的功能实现

大纲

  1. 创建链式队列。
  2. 完成插入,删除,查看,清空等功能。
  3. 具体实现,完工。

图片示例展示

代码纯文本示例展示

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

typedef struct QNode
{	
	int data;
	struct QNode* next;	
}QNode,*QueuePtr;

typedef struct
{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

int Init(LinkQueue& Q)
{
	Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
	if (!Q.front)
	{
		printf("ERROR");
		return 0;
	}
	Q.front->next = NULL;
	return 1;
}

int Insert(LinkQueue& Q, int e)  //添加元素
{
	QNode* p;
	p = (QueuePtr)malloc(sizeof(QNode));
	if (!p)
	{
		printf("ERROR!");
		return 0;
	}
	p->data = e;
	p->next = NULL;
	Q.rear->next = p;
	Q.rear = p;
	return 1;
}

int Show(LinkQueue& Q) //显示元素
{
	if (Q.front == NULL)
	{
		printf("队列为空!\n");
		return 0;
	}
	QNode* p = Q.front->next;
	printf("队列中已有数据为:\n");
	while (p != NULL)
	{
		printf("%d%c", p->data,p->next==NULL?'\n':' '); //三目运算符
		p = p->next;
	}	
	return 1;
}

int Delete(LinkQueue& Q, int e) //删除元素
{
	QNode* p;
	if (Q.front == Q.rear)
	{
		printf("队列为空!\n");
		return 0;
	}
	p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	if (Q.rear == p)
		Q.rear = Q.front;
	free(p);
	return 1;
}

int  CleaerEvery(LinkQueue& Q) //清空队列释放所有元素
{
	if (Q.front == NULL)
	{
		printf("队列为空!\n");
		return 0;
	}
	while (Q.front != NULL) //不为空则继续查找
	{
		Q.rear = Q.front->next;
		free(Q.front);
		Q.front = Q.rear; //赋予新的值
	}
	return 1;
}

int LengthNode(LinkQueue& Q) //队列长度
{	
	if (Q.front==NULL)
	{
		printf("队列为空!\n");
		return 0;
	}
	int a=0;
	QNode* b=Q.front->next;
	while (b!=NULL)
	{
		a++;
		b = b->next;
	}
	printf("\n此时队列的长度是:%d\n", a);
	return 1;
}

void GoHome() //结束程序
{
	printf("即将关闭程序!");
	exit(1);
}

int main()
{
	int a, s;
	LinkQueue Q;
	Init(Q);
	printf("注意:5.为清空队列,6.为显示队列长度\n");
	while (1) {
		printf("---\n1.添加元素,2.释放元素,3.查看所有元素,4.关闭程序,请选择:");
		scanf_s("%d", &a);
		switch (a)
		{
		case 1: 
			printf("请输入元素号:");
			scanf_s("%d", &s);
			Insert(Q, s);
			break;
		case 2:
			Delete(Q, s);
			break;
		case 3:
			Show(Q);
			break;
		case 4:
			GoHome();
			break;
		case 5:
			CleaerEvery(Q);
				break;
		case 6:
			LengthNode(Q);
			break;
		default:
			printf("请重新选择!\n");
			break;
		}

	}
	return 0;
}

运行效果展示

End

int LengthNode(LinkQueue& Q)
{

}

int LengthNode(LinkQueue* Q)
{

}
的不同。

勿忘~

~

发布了34 篇原创文章 · 获赞 0 · 访问量 498

猜你喜欢

转载自blog.csdn.net/weixin_44228006/article/details/104095734