1、 班级班级: 姓名:姓名: 学号:学号: 设计时间:设计时间: 高 级 语 言 程 序 设 计 课 程 设 计 报 告 高 级 语 言 程 序 设 计 课 程 设 计 报 告 1 一、应用程序的名称:链表 二、应用程序的主题与设计目的:实现一个链表的建立、输出, 并且完成节点的插入、删除操作。 三、应用程序简介: 1、基本结构 A、功能模块图 B、各模块流程图 (1) 链表的建立: 开辟一个新节点,使 p1、P2 指向它 读入一个学生数据给 p1 所指的结点 Y N 链 表 的 建 立 链 表 的 输 出 节 点 的 删 除 节 点 的 插 入 链表的基本操作 链 表 的 建 立 链 表 的
2、输 出 节 点 的 删 除 节 点 的 插 入 开始 Head=NULL,n=0 Head=NULL,n=0 p1 num=0? P1num=0? 1 1 2 2 P2next=p1 Head=p1 p2next=NULL 1 2 n=n+1 n=1? N Y p2=p1 结束 在开辟一个新节点,使 p1 指向它 读入一个学生数据给 p1 所指结点 (2) 链表的输出: 开始 P=head Head=N ULL N Y P 指向的不是结点 P2next=p1 P=head Head=NULL 1 4 3 p2next=NULL Head=p1 3 输出 p 指向的节点并且 p 指向下一个节点
3、(3) 链表结点的删除 Y N P2 后移一个位置 P1 后移一个位置 N Y 开始 Head=NULL? P1=head num=p1num 或 p1=NULL? P2=p1 Num=p1 num 3 4 pnum,pscore p=NULL 结束 pnum,pscore p=NULL 结束 开始 Head=NULL? P1=head “空表” “空表” num=p1num 或 p1=NULL P1=p1next P2=p1 Num=p1num 4 N p1 是要删除的结点 Y (4) 链表节点的插入 Y N N Y 找不到 P1=head? head=p1next (删除一个结点) P2n
4、ext=p1next (删除一个结点) 结束 开始 P2=p1 原来的链表 是空表? P0nump1 num,p1 所指 的 不 是 表 尾 节 P1=head,p0=stud P1=head “找不到” P1=p1next Head=p1next P2next=next 结束 5 2、基本内容:(源代码及注释) #include #include #define LEN sizeof(struct student) int n; struct student int num; P0numnum? Head=p1? Head=p0 P0ne xt=p0 ( 插 到 表 头 之 前) P2nex
5、t =p0,p0 next =p1 n=n+1 结束 将 p0 所指的 结 点 作 为 唯 一节点 N Y P1 指向头结点 Y N 插到表中间 P1next=p0 P0next=NULL 6 int score; struct student *next; struct student *creat(void) /*定义函数,此函数带回一个指向定义函数,此函数带回一个指向 链表头的指针链表头的指针*/ struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); /*开辟一个新单
6、元开辟一个新单元*/ scanf(“%d,%d“, head=NULL; while(p1-num!=0) n=n+1; if(n=1)head=p1; else p2-next=p1; /*把把 p1 所指的结点连接在所指的结点连接在 p2 所指的结所指的结 点后面点后面*/ p2=p1; p1=(struct student*)malloc(LEN); scanf(“%d,%d“, p2-next=NULL; return(head); /*函数返回函数返回 head的值, 即链表中第一个节点的的值, 即链表中第一个节点的 起始地址起始地址*/ 7 void print(struct student*head) struct student*p; printf(“nNow,these %d records are:n“,n); p=head; if(head!=NULL) do printf(“%d %dn“,p-num,p-score); p=p-n