链队列的基本 *** 作

链队列的基本 *** 作,第1张

队列的基本 *** 作

1、初始化一个链队列,输入队列元素
2、对已建立的链队列实现遍历队列、求队列长度、队列的判空、获取队头队尾元素、队列的入队出队等 *** 作。
3、最好用菜单形式对应各个 *** 作,使其编程一个完整的小软件。
参考界面:

#include
#include

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0
#define MAXQSIZE 100

typedef int QElemType;
typedef int Status;typedef struct QNode
{
	QElemType data;
	struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
	QueuePtr front;
	QueuePtr rear;
}linkQueue;

int i,n;//i控制循环,n表示位序
QElemType e;//一个临时的队列元素;

Status InitQueue(linkQueue &Q);
void QueueEmpty(linkQueue Q);
Status QueueLength(linkQueue Q);
void GetHead(linkQueue &Q,QElemType &e);
void GetDataEnd(linkQueue &Q,QElemType &e);
Status EnQueue(linkQueue &Q,QElemType e);
Status DeQueue(linkQueue &Q,QElemType &e);
void QueueTraverse(linkQueue Q);



int main(){
	linkQueue Q;
	int code;
	while(1){
	system("cls");
	printf("**********************************************************n");
	printf("****                  ****系统菜单****                ****n");
	printf("****            *  1.初始化队列                *      ****n");
	printf("****            *  2.输入队列元素              *      ****n");
	printf("****            *  3.遍历队列                  *      ****n");
	printf("****            *  4.求队列的长度              *      ****n");
	printf("****            *  5.获取队头元素              *      ****n");
	printf("****            *  6.获取队尾元素              *      ****n");
	printf("****            *  7.在队尾插入元素            *      ****n");
	printf("****            *  8.删除队头元素              *      ****n");
	printf("****            *  9.判断是否为空队列          *      ****n");
	printf("****            *  10.退出                     *      ****n");
	printf("**********************************************************n");
		printf("请输入 *** 作代码:");
		scanf("%d",&code);
		switch(code)
		{
			case 1:
				{
					int temp;
					temp=InitQueue(Q);
					if(temp==OK)
						printf("链队列初始化成功!n");
					else
						printf("链队列初始化失败!n");
					break;
				}
			case 2:
				{
					int temp,i,e;
					printf("请输入要入队的元素个数:");
					scanf("%d",&temp);
					for(i=1;i<=temp;i++)
					{
						printf("请输入第%d个元素:",i);
						scanf("%d",&e);
						EnQueue(Q,e);
					}
					break;
				}
			case 3:
				{
					QueueTraverse(Q);
					break;
				}

			case 4:
				{
					int temp;
					temp=QueueLength(Q);
					if(temp==ERROR)
						printf("队列不存在!n");
					else
						printf("队列长度为:%dn",temp);
					break;
				}
			case 5:
				{
					int e;
					GetHead(Q,e);
					printf("队头元素为:%dn",e);
					break;
				}
			case 6:
				{
					int e;
					GetDataEnd(Q,e);
					printf("队尾元素为%dn",e);
					break;
				}
			case 7:
				{
					int e,temp;
					printf("请输入要输入的队尾元素:");
					scanf("%d",&e);
					temp=EnQueue(Q,e);
					if(temp==OK)
						printf("插入成功!n");
					break;
				}
			case 8:
				{
					int e;
					DeQueue(Q,e);
					printf("删除的队头元素为:%dn",e);
					break;
				}
			case 9:
				{
					QueueEmpty(Q);
					break;
				}
			case 10:
				{
					printf("程序结束!n");
					return 0;
					break;
				}
		default:printf("数据无效,请重新输入!n");
		}
		system("pause");
	}
}


Status InitQueue(linkQueue &Q)
{
    //Q.rear = new QElemType[MAXQSIZE];
	Q.front=Q.rear=new QNode;
	if(!Q.front)
		exit(OVERFLOW);
	Q.front->next=NULL;
	return OK;
}

void QueueEmpty(linkQueue Q)
{
    if(Q.front==Q.rear)
        printf("队列为空!");
    else
        printf("队列不为空!");
}
Status QueueLength(linkQueue Q)
{
    int num=0;
    if(Q.front==Q.rear){
         printf("空队列,长度为0.n");
         return OK;
    }
    Q.front=Q.front->next;
    while(Q.front)
    {
        Q.front=Q.front->next;
        num++;
    }
    return num;
}
void GetHead(linkQueue &Q,QElemType &e)
{
    e=Q.front->next->data;
}

//****************************获取队尾元素***************************
void GetDataEnd(linkQueue &Q,QElemType &e){
    e=Q.rear->data;
}
Status EnQueue(linkQueue &Q,QElemType e)
{
    QNode *p;
	p= new QNode;
	if(!p)
		exit(OVERFLOW);
	p->data=e;
	p->next=NULL;
	Q.rear->next=p;//****是否有头结点的关键语句,若rear不指向next,则无头结点,反之亦然。****
	Q.rear=p;
	return OK;
}
Status DeQueue(linkQueue &Q,QElemType &e)
{
    QNode *p;
	if(Q.front==Q.rear)
		return ERROR;
	p=Q.front->next;
	e=p->data;
	Q.front->next=p->next;
	if(Q.rear==p)
		Q.rear=Q.front;
	delete p;
	return OK;
}
void QueueTraverse(linkQueue Q)
{
	int e;
	printf("队列遍历结果:n");
	while(Q.front!=Q.rear)
	{
		Q.front=Q.front->next;
		e=Q.front->data;
		printf("%dt",e);
	}
	printf("n");
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5651030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存