数据结构单链表课程设计设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 && jnext; ++j;} /*找出第i节点,并令p指向其前趋*/

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);

相关文档
最新文档