数据结构单链表课程设计设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计报告
1)需求分析
此程序主要用来实现单链表的创建、插入、删除、排序、并、交、差运算及输出等基本操作。
程序需要根据使用者的需要来运算得出符合要求的结果
①在程序运行的过程中根据提示进行输入,使用了scanf函数;
②使用了printf函数进行输出;
③程序输出符合使用者的需要的结果;
④程序能够输出任意运算的正确结果。
2)概要设计
1. 定义所需的数据结构
data *next
typedef struct LNode{
//数据域int data;
//struct LNode *next; 指针域}LNode, *LinkList;
2. 模块划分//创建void LinkListCreat(LinkList &L,int n);
//void ListInsert(LinkList head,int i,int e); 插入
void ListDelete(LinkList head,int i,int e); //删除输出// void
printList(LinkList &head);
void LinkListsort(LinkList &L); 排序//
// &Lc); &Lb,LinkList &La, LinkListMerge(LinkList void LinkList
并void LinkListJiao(LinkList &La, LinkList &Lb,LinkList &Lc); 交// 1
// &La, LinkList &Lb,LinkList &Lc); void LinkListcha(LinkList
差//差集的并void LinkListhebing(LinkList &La, LinkList &Lb,LinkList &Lc);
主函数,分别调用以上的子函数//void main();
3 .功能设计
首先利用元素逆序插入法建立链表,然后导出菜单,用switch调用各个子函数,实现链表的创建,插入,删除,排序,交,并,差等运算,其中排序用的是冒泡法。
3)详细设计
//单链表的创建
void CreatList(Lnode *L) /*建立链表CreastList函数*/
{ Lnode *p;
int value;
L->next=NULL;
while (1) /*当输入非0数值时*/
{scanf( %d,&value);
if (value==NULL)
return;
p=(Lnode *)malloc(sizeof(Lnode)); /*建立P链表*/
p->data=value;
p->next=L->next; /*把后输入的插到前面*/
L->next=p;
}
}
//单链表的输出
void printList(Lnode *head)
{
牰湩晴尨输出的结果如下:\n);
Lnode *p = head->next;//头结点赋给P
if (p == NULL)
{
printf(List is empty!\n);
return;
2
}
while (p != NULL)
{
printf(%d , p->data);
p = p->next;
}
printf(\
);
}
//单链表的插入
void ListInsert(LinkList head,int i,int e)//在单链表中第i个位置之前插入e元素{
LinkList p,s;
int j=0;
p=head;
while(p&&j { p = p->next; ++j; } if(!p||j>i-1) { ); 牰湩晴尨要插入的位置错误!} 给插入的元素开辟空间s = (LNode *)malloc(sizeof(LNode));// 改变指针指向s->data = e;//s->next = p->next; p->next = s; } //单链表的删除 int ListDelete_L(Lnode *L,int i) /*删除函数*/ 3 { Lnode *p=L->next; int j=0; Lnode *q; while (p->next && j if (!p->next || j>i-1) return 0; q=p->next; p->next=q->next; free(q); return 1; } //单链表的差运算 Lnode *c,*a,*t; c=C=(Lnode *)malloc(sizeof(Lnode)); a = A->next; while(a) { p = B->next; while(p && a->data != p->data) { p = p->next; } if(!(p && p->data == a->data)) { t=(Lnode *)malloc(sizeof(Lnode)); t->data = a->data; c->next = t; c = t; } a=a->next; } c->next = NULL; printf( \n 进行差运算,结果为:\n);