数据结构课程设计2013112110-刘进招
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
课程设计题目:10.单链表操作
姓名:张定水学号:2013112134
班级:20131121物联网组长:张定水
指导老师:解德祥
计算机与信息学院
一、设计题目
10.单链表操作
在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单
链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。例如:
(7,10,10,21,30,42,42,42,51,70)将变作(7,10,21,30,
42,51,70)。
要求:
1)测试数据为结构型,如学生成绩(学号,姓名,成绩)中学号相同
的去掉
2)试着对数据用文件来读入输出(由文件读入数据,再输出到文件中)
二、运行环境(软、硬件环境)
VC 计算机(win7旗舰版64位)
三、算法设计的思想(可用文字或算法)
利用单链表存储学生成绩的信息,包括姓名,学号,和成绩
数据类型为结构型
从文件读取数据建立链表,然后进行去重操作,最后存到硬盘的目
录下
其中去重操作思想如下:
利用while循环遍历链表找出学号相同的结点,将它free掉。
四、算法的流程图(画出主要程序的流程图)
五、算法设计分析(性能分析)
遍历结点两趟,故性能为0(n2)
六、运行结果分析(要求有运行截图)1编译通过
2运行
3选择数据
4执行去重
5预览结果
6保存文件
7退出
七、收获及体会(自己完成情况及真实想法,拒绝假大空)附录:
1.完整的源代码(要求有三分之一以上的代码注解)//已修改
#include
#include
#include
#include
/*定义节点类型*/
typedef struct Node
{
int num;//学号
char name[10];//姓名
int grade;//分数
struct Node *next;//指针
}Node,*Linklist;
/*子菜单*/
int menu2(){
int n2;
printf("\t*选择数据文件*\n");
printf("\t\t*1->文件1 *\n");
printf("\t\t*2->文件2 *\n");
printf("\t\t*0->返回*\n");
rewind(stdin);
scanf("%d",&n2);
return n2;
}
/*主菜单*/
int menu1(){
int n;
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃****************数据结构课程设计******************┃\n");
printf("\t┃单链表操作:对学生成绩去除重复的学号信息┃\n"); printf("\t┃选项:┃\n"); printf("\t┃1->选择数据┃\n");
printf("\t┃2->执行去重┃\n");
printf("\t┃3->打印结果┃\n");
printf("\t┃4->保存到文件┃\n"); printf("\t┃5->退出┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
scanf("%d",&n);
rewind(stdin);//清除缓冲区
return n;
}
/*初始化单链表*/
void Initlist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(Node));//申请结点空间
(*L)->next=NULL;//结点指针置空
}
/*用头插法建立单链表,从文件读入数据*/
void CreateFromHead(Linklist *L, int n)
{
FILE *fp;
Node *r, *s;//结点指针,用于交换
int flag=1;
int num1;
char name1[10];
int grade1;
r=*L;
if(1==n&&(fp=fopen("d:\\1.txt","r"))==NULL) /*打开文件*/ {
printf("Can not open file!");
exit(-1);
} //x为链表数据域中的数据
if(2==n&&(fp=fopen("d:\\2.txt","r"))==NULL) /*打开文件*/ {
printf("Can not open file!");
exit(-1);
} //x为链表数据域中的数据
while(fscanf(fp,"%d%s%d",&num1,name1,&grade1)!=EOF)
{
s=(Node *)malloc(sizeof(Node));
s->num=num1;
strcpy(s->name,name1);
s->grade=grade1;
r->next=s;
r=s;
}
flag=0;
r->next=NULL;
}
int DelSame(Linklist *la)/*去重复的函数*/
{
int flag=0;