《数据结构》课。程。
设。计。报。告。
题目链表操作。
专业班级。姓名。
学号。设计时间。
指导教师。一、设计题目。
链表操作 一、 设计目的
1.掌握线性链表的建立。
2.掌握线性链表的基本操作。
二、设计内容和要求
利用链表的插入运算建立线性链表,然后实现链表的查找、删除、计数、输出、排序、逆置等运算,插入、删除、查找、计数、输出、排序、逆置要单独写成函数,并能在屏幕上输出操作前后的结果。
二、运行环境(软、硬件环境)
硬件环境:软件环境:
microsoft visual c++ 6.0
三、算法设计思想。
插入:先创建一个结点用来存储要插入的元素,然后,通过单链表的指针功能,修改指针的指向来将新创建的结点插入该单链表中。
删除:通过循环找到要删除的位置,然后也是通过修改指针来将该位置的元素删除。
查找:声明三个变量和一个数组,其中两变量分别表示查找元素的个数和在链表**现的位置,一数组储存该元素在链表之中的位置,另外一变量作数组下标的递增之用。通过循环和if语句的条件比较来确定元素的位置和在链表之中的出现次数,保存于数组中,最后可将该元素在链表中的位置通过数组输出。
计数:用一结构体数组储存链表中各元素和其出现的次数然后通过双重循环来确定各元素的个数。
排序:可将简单的选择排序将循环条件变作指针表示得到。
逆置:用循环找到单链表的倒数第二个结点和最后一个结点,再声明一个新的结点将其指向最后一个结点,然后令链表的倒数第二个结点空(由此作为循环的截止条件),在用外层循环一步步将链表结点倒序接到以新增结点为头结点的链表上。
四、流程图。
五、算法设计与分析。
插入:先创建一个结点用来存储要插入的元素,然后,通过单链表的指针功能,修改指针的指向来将新创建的结点插入该单链表中。
该算法简单易行。
删除:通过循环找到要删除的位置,然后也是通过修改指针来将该位置的元素删除。
查找:声明三个变量和一个数组,其中两变量分别表示查找元素的个数和在链表**现的位置,一数组储存该元素在链表之中的位置,另外一变量作数组下标的递增之用。通过循环和if语句的条件比较来确定元素的位置和在链表之中的出现次数,保存于数组中,最后可将该元素在链表中的位置通过数组输出。
计数:用一结构体数组储存链表中各元素和其出现的次数然后通过双重循环来确定各元素的个数。
此算法不足之处是会删除重复的结点,导致计数前后链表变化。
排序:可将简单的选择排序将循环条件变作指针表示得到。
逆置:用循环找到单链表的倒数第二个结点和最后一个结点,再声明一个新的结点将其指向最后一个结点,然后令链表的倒数第二个结点空(由此作为循环的截止条件),在用外层循环一步步将链表结点倒序接到以新增结点为头结点的链表上。
六、源**。
#include <>
#include <>
#include <>
typedef struct node
int data;
struct node *next;
node,*linklist;
/创建链表。
void creatlist(linklist &l)
linklist p,r;
l=(linklist)malloc(sizeof(node));
l->next=null;
r=l;printf("输入链表以0结束");
for(;;
r->next=null;
/将e插到第i位。
void insertlist(linklist &l,int i,int e)
int j;
linklist s,f;
s=(linklist)malloc(sizeof(node));
f=(linklist)malloc(sizeof(node));
f->data=e;
s=l;for (j=1;j
f->next=s->next;
s->next=f;
/查找元素e
void searchelem(linklist l,int e)
int counti=0,counte=0,s=0;
int a[100];
while (l->next)
l=l->next;
if(counte==0)
elseprintf("次出现!");
/删除第i位。
void deletelist(linklist &l,int i)
int j;
linklist p,q;
p=(linklist)malloc(sizeof(node));
q=(linklist)malloc(sizeof(node));
p=l;for(j=1;j
q=p->next;
p->next=q->next;
free(q);
/计数。void listcount(linklist l)
struct a
a[100];
int m=0;
linklist p,q;
p=(linklist)malloc(sizeof(node));
q=(linklist)malloc(sizeof(node));
while (l->next)
m++;l=l->next;
printf("此链表中:");
for (int i=0;i
/排序。void listsort(linklist &l)
linklist p,q;
int m;
p=l;while(p->next)
p=p->next;
/逆置。void inverse(linklist &l)
linklist p,q,r;
p=(linklist)malloc(sizeof(node));
q=(linklist)malloc(sizeof(node));
r=(linklist)malloc(sizeof(node));
p=l;q->next=null;
r=q;while (p->next)
q->next=p->next;
q=q->next;
p->next=null;p=l;
l=r;/输出。
void printlist(linklist l)
while(l->next)
printf("");
void main()
int e,n;
linklist l;
l=(linklist)malloc(sizeof(node));
l->next=null;
creatlist(l);
system("cls");
int x;
do{printf("初始化:")
printlist(l);
printfn");
printf1.插入n");
printf2.删除n");
printf3.查找n");
printf4.计数n");
printf5.排序n");
printf6.逆置n");
printf7.退出n");
printfn");
printf ("输入选择:")
数据结构课程设计之链表讲解
数据结构 课程设计报告。之线性表及应用。信息工程学院。计算机科学与技术。姓名 xx班级 xx 学号 xx程序设计书目录。一 课程题目。二 设计目标。三 问题描述。四 需求分析。五 概要设计。六 详细设计 给出算法的伪码描述和流程图 七 测试分析。八 使用说明。九 测试数据。一十 课程设计总结。一 课...
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...