数据结构课程设计2013112110-刘进招

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

相关文档
最新文档