题目:
每天都要处理很多事务,为了更好地安排工作,希望在每天开始工作前,根据工作记录,生成工作备忘录。首先输入工作记录数(大于0的一个整数),再逐条输入各条工作记录,每条工作记录包括:工作名,开始时间,结束时间。假设每项工作的开始时间均小于它的结束时间,并且各项工作的开始时间互不相同。
工作备忘录的生成(链表)
工作备忘录的生成(链表)
我们的工作是需要把这些工作记录按开始时间排序并输出,在输出时,如果某项工作与若干项工作冲突(在做该项工作时,需要同时做其它工作),则在该工作名前加’*’。

/*
从该题让我们编写第一个函数名字,我们就能看懂我们要往该链表中插入数据;通过仔细的读题,我们是不能随随便便的插入数据;我们得把要插入的数据按照时间的顺序插入到链表中;
*/

Node* add(Node *header, Node *newnode)
{
	/*这里我们是判断头节点是不是空的,因为我们编写链表的时候是一般创建头节点的;
这里我就定义头节点为header;要插入的节点为newnode;pcurrent是当前的节点;
Pnext是当前节点的下一个节点;prev是当前节点的前一个节点;
我们编写代码的时候尽量做到见到名称就知道这个名称想代表什么意思;而不是用简单的a,b,c;来定义变量;
是在不行,用汉语拼音来定义变量名,尽量做到见名知意*/
if(header==NULL)
	{
		header=newnode;
		header->next=NULL;
		return header;
	}
	Node *pcurrent=header;
	Node *pnext=newnode;
	Node *prev=NULL;
	while(pcurrent!=NULL&&pcurrent->start<pnext->start)//这个题是应该按照时间的顺序插入节点;
	{
		prev=pcurrent;
		pcurrent=pcurrent->next;
	}
	if(pcurrent==header)//这里就存在一种特殊的情况,就是当应该插入的节点比头节点对应的时间还小,是不是我们得创建新的节点,来代替节点;
	{
		Node *newheader=newnode;
		newheader->next=header;
		header=newheader;
	}
	else
	{
		prev->next=pnext;
		pnext->next=pcurrent;
	}
//通过读题,我们必须每次返回头节点;
	return header;
}

void display(Node header)
{
Node
pcurrent=header;
Node pnext=pcurrent->next;
//这里就是`插入‘
’的代码;但是我们也不能盲目的插入’’;得按照题目要求来插入’’;还有在我们插入号的时候需要进行判断;这个工作前面是否已经插入过号了;
还有我们不能简单的理解这个题是看第一工作和第二个工作是否有冲突;第二个工作和第三个工作有冲突;而是看第一个工作和所有第一个工作之后的工作是否有冲突;第二个工作和它之后的工作是否有冲突;、
//

while(pcurrent->next!=NULL)//这里是插入*
		{
			while(pnext!=NULL)
			{
				
				if(pcurrent->end>pnext->start)
				{
					if(pcurrent->name[0]!='*')
					{
						pcurrent->name.insert(0,1,'*');
					}
					if(pnext->name[0]!='*')
					{
						pnext->name.insert(0,1,'*');
					}
				}
				pnext=pnext->next;
			}
			pcurrent=pcurrent->next;
			pnext=pcurrent->next;
		}
		
		
		pcurrent=header;
 		while(pcurrent!=NULL)//这里遍历就是按照题目的要求输出;
 		{
 			cout<<pcurrent->name<<" "<<pcurrent->start<<" "<<pcurrent->end<<endl;
 			pcurrent=pcurrent->	next;
		}
}
//全部代码`Node* add(Node *header, Node *newnode)
{
	if(header==NULL)
	{
		header=newnode;
		header->next=NULL;
		return header;
	}
	Node *pcurrent=header;
	Node *pnext=newnode;
	Node *prev=NULL;
	while(pcurrent!=NULL&&pcurrent->start<pnext->start)
	{
		prev=pcurrent;
		pcurrent=pcurrent->next;
	}
	if(pcurrent==header)
	{
		Node *newheader=newnode;
		newheader->next=header;
		header=newheader;
	}
	else
	{
		prev->next=pnext;
		pnext->next=pcurrent;
	}
	return header;
}
void display(Node *header)
{
		Node* pcurrent=header;
		Node *pnext=pcurrent->next;
		while(pcurrent->next!=NULL)
		{
			while(pnext!=NULL)
			{
				
				if(pcurrent->end>pnext->start)
				{
					if(pcurrent->name[0]!='*')
					{
						pcurrent->name.insert(0,1,'*');
					}
					if(pnext->name[0]!='*')
					{
						pnext->name.insert(0,1,'*');
					}
				}
				pnext=pnext->next;
			}
			pcurrent=pcurrent->next;
			pnext=pcurrent->next;
		}
		
		
		pcurrent=header;
 		while(pcurrent!=NULL)
 		{
 			cout<<pcurrent->name<<" "<<pcurrent->start<<" "<<pcurrent->end<<endl;
 			pcurrent=pcurrent->	next;
		}
}`

相关文章: