用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

// 在一次舞会上,来了许多男士和女士。这些男士和女士分别排队进入舞厅。第

2012-10-27 作者: 上帝是男孩举报

[c]代码库

//    在一次舞会上,来了许多男士和女士。这些男士和女士分别排队进入舞厅。第一个
//舞曲开始后,男士和女士按照队列顺序配对并走入舞池。当男士多于女士时,配对
//剩余的男士仍然在队列中。一曲终了,跳完舞的男士排在队尾,女士排成新的队列。
//下一舞曲开始时,男女重新按照队列顺序配对跳舞。当女士多于男士时,配对剩余
//的女士仍然在队列中,等待下一曲配对。现在要求按照队列中的先后顺序打印出第
//十轮配好对的人员名单和剩余人员的名单。


#include<stdio.h>
#include<stdlib.h>
#include"test4.h"
#include<string.h>
#define Maxsize 100

int main()
{
	int i,j,len,len1,len2,count;
	char str[Maxsize],e;
	LinkQueue *Q1,*Q2; //定义俩链式队列Q1,Q2
	Q1=CreateQNode(0);//初始化Q1
	Q2=CreateQNode(0);//初始化Q2

	printf("用字母代表女士!输入女士:\n");
	gets(str);
	len1=strlen(str);//len1表示女士数量
	for(i=0;i<len1;i++)
		EnQNode(Q1,str[i]);//将数据元素插入队列Q1中
	
	printf("从链表队列中输出:\n");
	Display(Q1);//将队列Q1的数据元素输出

	printf("用数字代表男士!输入男士:\n");
	gets(str);
	len2=strlen(str);//len2表示男士数量
	for(i=0;i<len2;i++)
		EnQNode(Q2,str[i]);//将数据元素插入到队列Q2中

	printf("从链表队列中输出:\n");
	Display(Q2);//输出队列Q2的数据元素

	printf("共输出几轮配对:\n");
	scanf("%d",&count);//输入配对次数

	for(i=1;i<=count;i++)
	{
		printf("输出第%d轮配对\n",i);
		printf("输出配对男女:\n");
        if(len1 >= len2)//比较女士Q1和男士Q2的数量,取小值
		     len=len2;
	    else
		     len=len1;

		for(j=0;j<len;j++)
		{
			DeQNode(Q1,&e);//从Q1中取出头元素(出队)
		    printf("%c",e);
		    EnQNode(Q1,e);//将取出的头元素再次插入队列Q1中(入队)

		    DeQNode(Q2,&e);//从Q2中取出头元素(出队)
			printf("%c",e);
			EnQNode(Q2,e);//将取出的头元素再次插入队列Q2中(入队)

			printf(" ");
		}

		printf("\n输出未配对的男(女):\n");

		if(len1 <= len2)
		{
			len=len2-len1;
			Output(Q2,len);//遍历队列,从Q2中输出前len个数量的数据元素
		}
		else
		{
			len=len1-len2;
			Output(Q1,len);//遍历队列,从Q1中输出前len个数量的数据元素
		}
		printf("\n\n");
	}

	return 0;
}




////////////////////////////////////////
/*         test4.cpp                 */
/*                                   */
/*     filename:test4.cpp            */
/*     description:test4.h的实现文件 */
/*     designer:zhu jian             */
/*     data:12-10-27                 */
///////////////////////////////////////


#include<stdio.h>
#include<stdlib.h>
#include"test4.h"
#include<string.h>
#define Maxsize 100

LinkQueue *CreateQNode(elemtype e)//创建一个空的链表队列
{
	QNode *Q;
	LinkQueue *p;
    Q=(QNode *)malloc(sizeof(QNode));
	p=(LinkQueue *)malloc(sizeof(LinkQueue));
	if(!Q || !p)
		return NULL;

	Q->data=e;
	Q->next=NULL;
	p->front=p->rear=Q;
	return p;
}

unsigned char EnQNode(LinkQueue *Q,elemtype e)//插入数据元素(入队)
{
	LinkQueue *p;
	QNode *q;
	p=Q;
	if(!Q)
		return NULL;

	q=(QNode *)malloc(sizeof(QNode));
	if(!q)
		return ERROR;

	q->data=e;
	q->next=NULL;
	p->rear->next=q;
	p->rear=q;
	return OK;
}

unsigned char DeQNode(LinkQueue *Q,elemtype *e)//读取队列的数据元素,并删除结点(出队)
{
	QNode *p;
	QNode *q;
	p=Q->front;
	if(Q->front == Q->rear)
		return NULL;

	*e=p->next->data;
	q=p->next;
	p->next=q->next;
	if(Q->rear == q)
	      Q->rear=p;
	free(q);
	return OK;
}

unsigned char Display(LinkQueue *Q)//遍历整个队列
{
	LinkQueue *p;
	QNode *q;
	p=Q;
	if(!Q)
		return NULL;

	q=p->front->next;
	while(q != p->rear)
	{
		printf("%c",q->data);
		q=q->next;
	}
	printf("%c\n",q->data);
	return OK;
}

unsigned char Output(LinkQueue *Q,int len)//输出链表队列的前len个元素
{
	int i;
	QNode *p;
	p=Q->front;
	if(!Q)
		return ERROR;

	for(i=0;i<len;i++)
	{
		printf("%c",p->next->data);
		p=p->next;
	}
	printf("\n");

	return OK;
}








///////////////////////////////////
/*         test4.h                */
/*                                */
/*     filename:test4.h           */
/*     description:test4的头文件  */
/*     designer:zhu jian          */
/*     data:12-10-27              */
////////////////////////////////////




#ifndef _DATA_STRUCTURE_TEST4_H_
#define _DATA_STRUCTURE_TEST4_H_

#ifndef ERROR
#define ERROR 0
#endif

#ifndef OK 
#define OK 1
#endif

#ifndef NULL
#define NULL 0
#endif

typedef char elemtype;//用elemtype代替char

typedef struct QNode{//定义队列的链表结构体
	elemtype data;
    struct QNode *next;
}QNode;

typedef struct{//定义队列的头指针和尾指针
	QNode *front;
	QNode *rear;
}LinkQueue;


LinkQueue *CreateQNode(elemtype e);//创建一个链表结构的队列指针

unsigned char EnQNode(LinkQueue *Q,elemtype e);//插入数据元素(入队)

unsigned char DeQNode(LinkQueue *Q,elemtype *e);//读取队列的数据元素(出对)

unsigned char Display(LinkQueue *Q);//遍历整个队列

unsigned char Output(LinkQueue *Q,int len);//输出链表队列的前len个元素


#endif







网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...