链队的基本操作(C语言/C++)

链队的基本操作
1、分配空间初始化
2、入队
3、出队
4、判断队是否为空
5,清空队
6,销毁队
7、遍历队
8,取对头
9、获取队的长度

用开关语句来控制程序的功能选择

//链队
#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0

typedef int Status;
typedef char QElenType;

typedef struct QLNode
{
	QElenType data;
	struct QLNode *next;
}QLNode,*QueuePtr;

typedef struct
{
	QLNode *front;
	QLNode *rear;
}LinkQueue;

Status InitLink_Q(LinkQueue *Q)
{
	Q->front=Q->rear=(QueuePtr)malloc(sizeof(QLNode));
	if(!Q->front) exit(0);
	Q->front->next=NULL;
	Q->rear->next=NULL;
	return OK;
}

//入队
Status CreatLink_Q(LinkQueue *Q)
{
	QElenType e;
	QLNode *s;
	int i=0,length;
	if(!Q->front) return ERROR;
	printf("请输入要入队多少个元素:");
	scanf("%d",&length);
	for(i=0;i<length;i++)
	{
	    fflush(stdin);
		scanf("%c",&e);
		s=(QueuePtr)malloc(sizeof(QLNode));
		s->data=e;
		s->next=Q->rear->next;
		Q->rear->next=s;
		Q->rear=s;
	}
	return OK;
}
//出队
Status GetQueue(LinkQueue *Q)
{
	QElenType e;
	if(!Q->front) return ERROR;
	while(Q->front->next!=NULL)
	{
	    Q->rear=Q->front->next;
		e=Q->rear->data;
		Q->front->next=Q->rear->next;
		free(Q->rear);
		printf("%c ",e);
	}
	Q->rear=Q->front;
	return OK;
}
//判队是否为空
void L_QueueEmp(LinkQueue *Q)
{
	if(Q->front->next==NULL) printf("队为空!\n");
	else
	printf("队不为空!\n");

}
//清空
Status Clear_Q(LinkQueue *Q)
{
	QLNode *p;
	if(Q->front->next==NULL) printf("队为空!\n");
	else
	{while(Q->front->next!=NULL)
	{
		Q->rear=Q->front->next;
		Q->front->next=Q->rear->next;
		free(Q->rear);
	}
	Q->rear=Q->front;
	return OK;}
}

//销毁
Status Destroy_Q(LinkQueue *Q)
{
	if(Q->front->next==NULL) free(Q->front);
	while(Q->front!=NULL)
	{
		Q->rear=Q->front->next;
		free(Q->front);
		Q->front=Q->rear;
	}
	free(Q->front);
	return OK;
}

//遍历
Status Trever_Q(LinkQueue *Q)
{
	QLNode *p;
	QElenType e;
	if(Q->front==Q->rear) return 0;     //
	p=Q->front->next;
	while(p!=NULL)
	{
	    e=p->data;
		p=p->next;
		printf("%c ",e);
	}
	return OK;
}
//获取头
void Get_Head(LinkQueue *Q)
{
	QElenType e;
	if(Q->front->next==NULL) exit(0);
	Q->front=Q->front->next;
	e=Q->front->data;
	printf("对头元素为:%d\n",e);
}
//长度
Status Q_length(LinkQueue *Q)
{
	QLNode *p;
	int k=0;
	p=Q->front;
	while(p->next!=NULL)
	{
		p=p->next;
		k++;
	}
	return k;
}
void Desktop()
{
    printf("***********************\n");
	printf("1、初始化建立队\t\t2、元素入队\n3、元素出队\t\t4、判断队是否为空\n5、清空队\t\t6、销毁队\n7、遍历队\t\t8、获取对头元素\n9、获取队长度\t\t10、清屏\n0、退出\n");
	printf("***********************\n");
}
int main()
{
	int i,j,select;
	LinkQueue Q;
	Desktop();
	while(1)
	{
		printf("请输入选择:");
		scanf("%d",&select);
		if(select==0) break;
		switch(select)
		{
			case 1://1、初始化建立队
			{
				i=InitLink_Q(&Q);
				if(i==1) printf("初始化成功!\n");
			}break;
			case 2://2、元素入队
			{
				i=CreatLink_Q(&Q);
				if(i==i) printf("入队成功!\n");
			}break;
			case 3://3、元素出队
			{
				i=GetQueue(&Q);
				if(i==1) printf("出队成功!\n");
			}break;
			case 4://4、判断队是否为空
			{
				L_QueueEmp(&Q);
			}break;
			case 5://5、清空队
			{
				i=Clear_Q(&Q);
				if(i==1) printf("清空成功!\n");
			}break;
			case 6://6、销毁队
			{
				i=Destroy_Q(&Q);
				if(i==1) printf("销毁成功!\n");
			}break;
			case 7://7、遍历队
			{
				i=Trever_Q(&Q);
				if(i==1) printf("遍历完成!\n");
			}break;
			case 8://8、获取对头元素
			{
				Get_Head(&Q);
			}break;
			case 9://9、获取队长度
			{
				i=Q_length(&Q);
				printf("队的长度为:%d\n",i);
			}break;
			case 10:
                {
                    system("cls");
                    Desktop();
                }break;
		}
	}
	system("pause");
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值