数据结构单链表课程设计设计 报告
PAGE
PAGE #
《数据结构》课程设计报告
1)需求分析
此程序主要用来实现单链表的创建、 插入、删除、卿F序、并、交、差运算及 输出等基本操作。
程序需要根据使用者的需要来运算 得出符合要求的结果
在程序运行的过程中根据提示进行输入,使用了 scanf函 数;
使用了 printf函数进行输出;
程序输出符合使用者的需要的结果;
程序能够输出任意运算的正确结果。
2)概要设计
定义所需的数据结构
data*nex t
data
typedef struct LNode{
//数据域
struct LNode 水next;//指针域
}LNode, *LinkList;
模块划分
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 fthead):〃输出
〃排void LinkListsort(LinkList &L);
〃排
序
voidLinkListMerge(LinkList&La, LinkList
&Lb, LinkList &Lc); 〃并
void LinkListjiao (LinkList &La, LinkList &Lb, LinkList &Lc); 〃交
void LinkListcha(LinkList &La, LinkList &Lb, LinkList
&Lc); 〃差
void LinkListhebing (LinkList &La, LinkList &Lb, LinkList &Lc); 〃差集的并
void main () ; //主函数,分别调用以上的子 函数
功能设计
首先利用元素逆序插入法建立链表,然后导出菜单,用 switch调用各个子函数,实现链表的创建,插入,删除,排序, 交,并,差等运算,其中排序用的是冒泡法。
详细设计
//单链表的创建
void CreatList (Lnode *L)/*建立
链表CreastList函数*/
{ Lnode *p;
int value;
L->next=NULL;
while (1)/*当输
入非0数值时*/ {scanf ( "%d", ftvalue); if (value==NULL)
/*建立
/*建立P
*)malloc (sizeof(Lnode));
链表*/
p->data=value;
p->next=L->next;/ *把后输入
的插到前面*/
L->next二p;
}
}
//单链表的输出
void printList(Lnode *head)
{
printf (z,输出的结果如下:\n");
Lnode *p 二 head-〉next;//头结点赋 给P
if (p 二二 NULL)
{
printf("List is empty!\n");
return;
}
wh订e (p 匸 NULL)
{
printf ("%d ", p->data);
p = p->next;
printf("\n");
}
〃单链表的插入
void Listlusert(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-l)
{
printfC要插入的位置错误「);
}
s=(LNode
*)malloc(sizeof (LNode)) ;// 给插入 的元素开辟空间
s->data = e;//改变指针指向
s->next = p->next;
p->next 二 s;
}
//单链表的删除
int ListDelete_L(Lnode *L, int i)
/*删除函数*/
{
Lnode *p=L->next;
int j=0;
Lnode *q;
while (p->next && j
{p=p一〉next; ++j;} /*找出第 i 节点,
PAGE
PAGE #
并令P指向其前趋*/
if (!p->next || j>i-l) return 0;
q=p->next;
p->next二q->next;
free(q);
:return 1;
}
〃单链表的差运算
Lnode
*c, *a, *t;
c=C