队列相关

/**********队列相关************/ 
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define OVERFLOW 0
#define error 0
typedef struct Qnode /*结点结构*/ 
{
	int data;
	struct Qnode *next;
}Qnode,*Queueptr;
typedef struct     /*队列的链表结构*/
{
	Queueptr front,rear;
}LinkQueue;
/*构造一个空队列Q*/
int InitQueue(LinkQueue *Q)
{
	Q->front=Q->rear=(Queueptr)malloc(sizeof(Qnode));
	if(!Q->front)
	exit(OVERFLOW);
	Q->front->next=NULL;
	return OK;
}
/*从头到尾依次对队列Q中每个元素输出*/
int QueueTraverse(LinkQueue *Q)
{
	Queueptr p;
	p=Q->front;
	while(p)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
	return OK;
}
/*插入元素为e的新的队尾元素*/ 
int EnQueue(LinkQueue *Q,int e)
{
	Queueptr s=(Queueptr)malloc(sizeof(Qnode));
	if(!s)
	exit(OVERFLOW);
	s->data=e;
	s->next=NULL;
	Q->rear->next=s;
	Q->rear=s;
	return OK;
}
/*出队操作*/ 
int DeQueue(LinkQueue *Q,int *e)
{
	Queueptr p;
	if(Q->front==Q->rear)
		return error;
	p=Q->front;/*将欲删除的队头结点暂存给p*/
	*e=p->data;/*将要删除的结点的值赋给e*/ 
	Q->front=p->next;
	if(Q->rear==p)/*若队头就是队尾,则删除后将rear指向头结点*/
	Q->rear=Q->front;
	free(p);
	return OK;
}
int main(int argc, char *argv[])
{
	int i,j,opp,d;
	LinkQueue p;
	InitQueue(&p);
	printf("\n1.给队列赋初始值 \n2.遍历队列 \n3.入队 \n4.出队");
    printf("\n0.退出 \n请选择你的操作:\n");
    while(opp!=0)
    {
		scanf("%d",&opp);
		switch(opp)
		{
		case 1:
			srand(time(NULL));
			for(i=1;i<=10;i++)
			{
				d=rand()%100+1;
				EnQueue(&p,d);
			}
			QueueTraverse(&p);
			break;
		case 2:
			 QueueTraverse(&p);
			 break;
	 	case 3:
	 		printf("请输入要入队的元素:");
	 		scanf("%d",&d); 
	 		EnQueue(&p,d);
			QueueTraverse(&p);
		 	break;
	 	case 4:
	 		DeQueue(&p,&d);
	 		printf("要删除的元素值为:%d\n",d);
	 		break;
 		case 0:
 			exit(0);
		}
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值