任务清单(数据结构作业设计)

设计背景

生活当中,我们每天需要处理各种各样的事务,随着处理事务的增多,我们也会出现遗忘的现象,为了避免遗忘一些重要的事情,我们可将这些任务记录下来,形成一个任务清单,并且按照任务的重要性给任务编写优先级。

设计功能
任务清单的功能有:

添加任务:

首先输入添加任务的个数,然后按照显示的提示,分别输入任务的时间,优先级序号(优先级高、中、低序号分别为1、2、3),以及任务内容。

删除已完成任务。

按照任务优先级排序:

即按照任务优先级的高、中、低的顺序将任务排序,先显示比较重要的任务。
4.
显示当前任务表。

设计代码
任务清单代码主要通过链表实现,主要有创建链表,运用选择法进行链表中内容的排序,删除链表,显示链表。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;

建立结构体,结构体中元素有日期(年、月、日),任务优先级序号,任务(定义为字符),以及next域。

typedef struct LNode{
  int year,month,day;
  int i;//任务优先级序号
  char task[1000];//任务
  struct LNode *next;
}LNode,*LinkList; 

通过创建链表L创建任务表,链表中逆序输入各任务

Status CreatList_L(LinkList &L,int num)
{//逆序输入n个元素的值
    LNode *p;
    int j;
    int y,m,d,t;
  int i;
   L=(LinkList) malloc(sizeof(LNode));
   L->next=NULL;
   for(j=num;j>0;--j)
   {
    p=(LinkList)malloc(sizeof(LNode));
    printf("任务%d:\n",j);
    printf("请输入添加任务日期\n");
    scanf("%d %d %d",&y,&m,&d);
   p->year =y;
   p->month =m; p->day =d;
     printf("任务优先级为:1.高;2.中;3.低\n");
     printf("请输入任务优先级序号\n");
     scanf("%d",&i);
     p->i=i;
    printf("请输入任务\n");
    scanf("%s",p->task  );
    printf("\n");
    p->next =L->next;
    L->next=p;
 } 
 }

将任务按照选择法进行优先级排序,选择法排序链表中的数据。

/*任务按照选择法进行优先级排序*/
Status CompareTask(LinkList &L)
{
 LNode *head,*prep1,*p1,*prep2,*p2,*premin,*min,*temp;
 head=L;
 if(L->next ==NULL||L->next ->next==NULL)
 {
  return OK;
 }
 for(prep1=head,p1=prep1->next ;p1->next !=NULL;prep1=prep1->next ,p1=prep1->next )
 {
  premin=prep1;
  min=p1;//保存最小节点 
  for(prep2=p1,p2=prep2->next ;p2!=NULL;prep2=prep2->next ,p2=prep2->next )
  {
   if(min->i >p2->i )
   {
    premin=prep2;
    min=p2;
   }
  }//找到两者之间的最小值 
  if(p1!=min)
  {
   if(p1->next ==min)//两个相比较的值相邻
   {
    temp=min->next ;
    prep1->next =min;
    min->next =p1;
    p1->next =temp;
    } 
    else//两个比较的数不相邻 
    {
     temp=min->next ;
     prep1->next =min;
     min->next =p1->next ;
     premin->next =p1;
     p1->next =temp;
    }
  }
 }
 printf("任务已排序\n");
 } 

任务表的显示

 //任务表的显示
void ListPrint_L(LinkList L,int num)
{
 LNode *p;
 int i;
 p=L->next;
 for(i=1;i<=num;i++)
 {
  printf("----------------------------------------\n");
  printf("任务%d:\n",i);
  printf("时间:%d %d %d\n",p->year,p->month,p->day);
  printf("优先级:%d\n",p->i);
  printf("任务:%s",p->task );
  printf("----------------------------------------\n");
  p=p->next;
 }
 }

删除任务

/*删除任务*/
Status ListDelet_L(LinkList &L,int i,int &num)
{
   LNode *p,*q;
   int j;
   p=L;
   j=0;
   while (p->next&&j<i-1)
  {
   p=p->next;
   ++j;
   } 
   if(!p||j>i-1)
   return ERROR;
   q=p->next;
   p->next=q->next;
   free(q);
   num-=1;
   printf("任务已删除\n");
   return num;
 }

主函数

main()
 {
  LinkList L,T;
  int i,k,num,flag;
  printf("请选择功能:\n");
  printf("1.添加任务;2.删除已完成任务;3.按照任务优先级排序;4.显示当前任务表;5.结束\n");
  for(k=1;;k++)
  {  
  printf("\n请进行功能的选择:"); 
     scanf("%d",&flag);
   if(flag==1)
   {
      printf("请输入添加任务个数\n");
      scanf("%d",&num);
      printf("\n");
        CreatList_L(L,num);
  }
   if(flag==2)
   {
    printf("请输入删除任务序号\n");
    scanf("%d",&i);
    ListDelet_L(L,i,num);
   }
   if(flag==3)
   {
    CompareTask(L);
   }
   if(flag==4)
   {
    ListPrint_L(L,num);
   }
   if(flag==5)
   break;
  }
  return OK;
  } 

代码运行
任务清单运行界面
在这里插入图片描述
添加三项任务
在这里插入图片描述
将三项任务按优先级排序并输出当前任务列表

在这里插入图片描述
删除第二项任务并输出列表
在这里插入图片描述
结束功能
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值