作业设计)"/>
任务清单(数据结构作业设计)
设计背景
生活当中,我们每天需要处理各种各样的事务,随着处理事务的增多,我们也会出现遗忘的现象,为了避免遗忘一些重要的事情,我们可将这些任务记录下来,形成一个任务清单,并且按照任务的重要性给任务编写优先级。
设计功能
任务清单的功能有:
添加任务:
首先输入添加任务的个数,然后按照显示的提示,分别输入任务的时间,优先级序号(优先级高、中、低序号分别为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;}
代码运行
任务清单运行界面
添加三项任务
将三项任务按优先级排序并输出当前任务列表
删除第二项任务并输出列表
结束功能
更多推荐
任务清单(数据结构作业设计)
发布评论