文档库 最新最全的文档下载
当前位置:文档库 › 通讯录的制作数据结构C语言版

通讯录的制作数据结构C语言版

通讯录的制作数据结构C语言版
通讯录的制作数据结构C语言版

通讯录的设计

一、设计思路:

经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应 enter ())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应 load())。

其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。

二、程序源代码:

#include

struct address{ /*创建一个address结构*/

char name[10]; /*姓名*/

char sex[2]; /*性别*/

char age[2]; /*年龄*/

char native[10]; /*籍贯*/

char telephone[12]; /*手机*/

struct address *next; /*下一个入口的指针*/

struct address *prior; /*当前记录的指针*/

} list_entry;

struct address *start; /*指向列表中第一个入口*/

struct address *last; /*指向列表中最后一个入口*/

void

enter(),display(),search(),save(),loa d();

menu_select(),list(),delet(),inp uts();

main()

{

char s[20],choice;

struct address *info;

start=last=NULL; /*列表长度清零*/

for(;;) { /*列循环的一个用法*/

switch(menu_select()){

case 1: enter(); /*输入1,进入enter()程序,是输入通讯录*/

break;

case 2:delet(); /*输入2,进入delete()程序,是删除一个记录*/

break;

case 3:list(); /*输入3,进入list()程序,是列表显示通信录*/

break;

case 4:search(); /*输入4,进入search()程序,搜索一个街道*/

break;

case 5:save(); /*输入5,保存列表到磁盘文件*/

break;

case 6:load(); /*输入6,从磁盘文件读入列表*/

break;

case 7:return(0);

}

}

}

/*选择一个选项*/

menu_select()

{

char s[20];

int c;

printf("1.输入一个名字(直接回车则退出)\n");

printf("2.删除一个名字\n");

printf("3.列表显示\n");

printf("4.搜索查询\n");

printf("5.保存文件\n");

printf("6.装入文件\n");

printf("7.退出\n");

do{

printf("\n输入您的选择:");

gets(s);

c=atoi(s);

}while (c<0||c>7);

return c;

}

/*输入名字和地址*/

void enter()

{

struct address *info,*dls_store();

for(;;){

info=(struct address *) malloc(sizeof(list_entry));

if (!info) {

printf("\n内存溢出");

return;

}

inputs("输入姓名:",info->name,10);

if (!info->name[0]) break; /*名字长度为0,停止输入*/

inputs("输入性别:",info->sex,2);

inputs("输入年龄:",info->age,2);

inputs("输入籍贯:",info->native,10);

inputs("输入电话:",info->telephone,12);

start=dls_store(info,start);

/*保存在第一个记录里*/

} /*输入循环*/

}

inputs(prompt,s,count) /*这个函数用于输入长度为count的一个字符串,用于防止字符串长度超过它的空间,并提出警告*/

char *prompt;

char *s;

int count;

{

char p[255];

do{

printf(prompt);

/*显示这个函数的字符串*/

gets(p); /*从键盘获得255个输入*/

if(strlen(p)>count) printf("n字符串超过长度!");

/*如果数组P中的长度超过调用函数中的参数count,提示*/

}while (strlen(p)>count);

/*如果输入的字符串长度超过count,循环重新输入,否则退出,返回调用者*/

strcpy(s,p); /*s是目标字符串,输出时字符串在s中*/

return(0);

}

/*产生一个又链接表,当一个新元

素插入到列表的开始时,一个指向第一个元素的指针被返回*/

struct address *dls_store(i,top) /*存贮顺序*/

struct address *i;

/*新的元素*/

struct address *top;

/*列表中的第一个元素*/ {

struct address *old,*p;

if(last==NULL) { /*列表中的第一个元素*/

i->next=NULL;

i->prior=NULL;

last=i;

return i;

}

p=top; /*从列表的顶部开始*/

old=NULL;

while(p){

if(strcmp(p->name,i->name)< 0){

old=p;

p=p->next;

}

else{

if (p->prior) {

p->prior->next=i;

i->next=p;

i->prior=p->prior;

p->prior=i;

return top;

}

i->next=p; /*新的第一个元素*/

i->prior=NULL;

p->prior=i;

return i;

}

}

old->next=i; /*设置未尾*/

i->next=NULL;

i->prior=old;

last=i;

return start;

}

/*从列表中删除一个元素*/

delet()

{

struct address *info,*find();

char s[10];

printf("输入姓名:");

gets(s);

info=find(s);

if(info){

if (start==info){

start=info->next;

if(start) start->prior=NULL;

else last=NULL;

}

else {

info->prior->next=info->next;

if (info!=last)

info->next->prior=info->prior ;

else

last=info->prior;

}

free(info); /*释放空间*/

}

return(0);

}

struct address *find(name)

/*一个查找姓名的结构*/ char *name;

{

struct address *info;

info=start;

while(info){

if(!strcmp(name,info->name)) return info;

info=info->next;

/*获得下一个地址*/

}

printf("姓名没有发现!\n");

return NULL; /*没有发现姓名*/

}

list() /*列表*/

{

register int t;

struct address *info;

info=start;

while(info){

display(info);

info=info->next;

/*获得下一个地址*/

}

printf("\n\n");

return(0);

}

void display(info) /*显示通信录*/

struct address *info;

{

printf("%s\n",info->name);

printf("%s\n",info->sex);

printf("%s\n",info->age);

printf("%s\n",info->native);

printf("%s\n",info->teleph one);

printf("\n\n");

}

void search() /*搜索一个名字*/

{

char name[10];

struct address *info,*find();

printf("输入查找的名字!");

gets(name);

if(!(info=find(name))) printf("没有找到!\n");

else display(info);

}

void save() /*保存通信录*/

{

register int t;

struct address *info;

FILE *fp;

if((fp=fopen("mlist","wb")) ==NULL) { /*打开文件名mlist 如果错误*/

printf("没有找到文件.\n");

exit(1);

}

printf("\n正在保存文件...\n");

info=start;

while(info){

fwrite(info,sizeof(struct address),1,fp);

info=info->next;

/*获得下一个地址*/

}

fclose(fp);

}

void load() /*打开一个文件*/

{

register int t;

struct address

*info,*temp=NULL;

FILE *fp;

if((fp=fopen("mlist","rb"))= =NULL){

printf("打开文件失败...\n");

exit(1);

}

while(start){

info=start->next;

free(info);

start=info;

}

printf("\n正在读取文件...\n");

start=(struct address*) malloc(sizeof(struct address));

if(!start){

printf("存贮溢出...\n");

return;

}

info=start;

while(!feof(fp)){

if(1!=fread(info,sizeof(struct address ),1,fp)) break;

/*为下一个分配空间*/

info->next=(struct address*)malloc (sizeof(struct address));

if(!info->next){

printf("存贮溢出...\n");

return;

}

info->prior=temp;

temp=info;

info=info->next;

}

temp->next=NULL; /*最后一个输入*/

last=temp;

start->prior=NULL;

fclose(fp); }

三、调试结果

调试结果初始状态如下图所示:

以下介绍五大重点功能:

步骤一:输入功能。选择1,输入名字“张三”,会出现一系列需要输入的信息,输入完毕后按回车,再重复以上动作输入两个人:王五、李四。如下图所示。

步骤二:保存功能。按两次回车,退出输入状态,按5保存。如图1所示。

图1

图2

步骤三:删除功能。选择2,输入“张三”,回车;选择5“保存”,回车。如图2所示。

步骤四:查看功能。选择3,回车,得到图3所示。

图3

图4

步骤五:搜索功能。选择4,输入“李四”,回车,得到图4所示。

四、设计过程中存在的问题

在设计的过程中,不免出现过很多问题。首先,设计第一个输入操作时没有考虑到返回的问题,所以如果选择了第一个操作则会无止境的重复输入,后来就在第一项操作后面设定回车直接返回的命令。

其次,为了保证通讯录的实用性和准确性,在设计完成后做了一些修改,比如,限制年龄为两位数、加入防止字符串长度超过存储空间的函数。

另外,在设计“删除”操作时,原先如果不存在删除的项目程序就会出错,后来加入了一条语句提示“该联系人不存在”。

五、有待改进的地方

由于水平有限,通讯录和最初设计的还是有很大的差别,为了更为清晰直观,我觉得可以再做一些修改,比如该程序版式比较凌乱,可以再美化以下排版;在每一个操作项后面加入一些选择条件比如“返回”之类的,更加人性化。

数据结构C语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题2分,共12分) 1.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=ps p一>next=HL B. p一>next=HL;HL=p3 C. p一>next=Hl;p=HL; D. p一>next=HL一>next;HL一>next=p; 2.n个顶点的强连通图中至少含有( )。 A.n—l条有向边 B.n条有向边 C.n(n—1)/2条有向边 D.n(n一1)条有向边 3.从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A.O(1) B.O(n) C.O(1Ogzn) D.O(n2) 4.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。 A.24 B.48 C. 72 D. 53 5.当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为( )参数,以节省参数值的传输时间和存储参数的空间。 A.整形 B.引用型 C.指针型 D.常值引用型· 6.向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为( )。 A.O(n) B.O(1) C.O(n2) D.O(10g2n) 二、填空题(每空1分,共28分) 1.数据的存储结构被分为——、——、——和——四种。 2.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为——域和——域。 3.——中缀表达式 3十x*(2.4/5—6)所对应的后缀表达式为————。 4.在一棵高度为h的3叉树中,最多含有——结点。 5.假定一棵二叉树的结点数为18,则它的最小深度为——,最大深度为——· 6.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定——该结点的值。 7.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层——调整,直到被调整到——位置为止。 8.表示图的三种存储结构为——、——和———。 9.对用邻接矩阵表示的具有n个顶点和e条边的图进行任一种遍历时,其时间复杂度为——,对用邻接表表示的图进行任一种遍历时,其时间复杂度为——。 10.从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为——和——· 11.假定对长度n=144的线性表进行索引顺序查找,并假定每个子表的长度均

数据结构实验一通讯录

数据结构实验报告 实验名称:实验一——线性表 学生姓名:大学霸 班级: xxxxxxxxxx 班内序号: xx 学号: xxxxxxxxxx 日期: 2012年11月1日 1.实验要求 实验目的: 1.学习指针,模板类,异常处理的使用; 2.掌握线性表的操作实现方法; 3.培养使用线性表解决实际问题的能力。 实验内容: 利用线性表实现一个通讯录管理,通信录的数据格式如下:struct DataType

{ int ID; 程序分析 编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含姓名、电话号码、住址等个人基本信息。 用《数据结构》中的链表做数据结构结合c 语言基本知识编写一个通讯录管理系统。本程序为使用方便,几乎不用特殊的命令,只需按提示输入即可,适合更多的用户使用。对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。 存储结构 存储结构:带头结点和尾结点的单链表 front 关键算法分析 本实验从整体上分为七大模块:(1)输入联系人信息; (2)添加联系人信息;(3)查找联系人信息;(4)查看联系人信息; (5 )删除

联系人信息;(6)修改联系人信息;(7)退出通讯录管理。通讯录系统图 通讯录的建立 伪代码: 1.在堆中申请新的结点; 2.新节点的数据域为a[i]; 3.将新节点加入到链表中; 4.修改尾指针;

5.全部结点插入后需要将终结结点的指针域设为空。 C++实现: ContactBook::ContactBook(DataType a[],int n)找不到返回空指针。 C++实现: 程序运行结果 主函数流程图:

通讯录的制作(数据结构C语言版)

通讯录的设计 一、设计思路: 经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应 enter ())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应 load())。 其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。 二、程序源代码: #include struct address{ /*创建一个address结构*/ char name[10]; /*姓名*/ char sex[2]; /*性别*/ char age[2]; /*年龄*/ char native[10]; /*籍贯*/ char telephone[12]; /*手机*/ struct address *next; /*下一个入口的指针*/ struct address *prior; /*当前记录的指针*/ } list_entry; struct address *start; /*指向列表中第一个入口*/ struct address *last; /*指向列表中最后一个入口*/

数据结构c语言版期末考试复习试题

《数据结构与算法》复习题 一、选择题。 1在数据结构中,从逻辑上可以把数据结构分为 C 。 A ?动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2?数据结构在计算机内存中的表示是指_A_。 A .数据的存储结构B.数据结构 C .数据的逻辑结构 D .数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A .逻辑 B .存储C.逻辑和存储 D .物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_C A .数据的处理方法 B .数据元素的类型 C.数据元素之间的关系 D .数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A A .各结点的值如何C.对数据有哪些运算 B .结点个数的多少 D .所用的编程语言实现这种结构是否方 6.以下说法正确的是D A .数据项是数据的基本单位 B .数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D .一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1) A .找出数据结构的合理性B.研究算法中的输入和输出的关系 C .分析算法的效率以求改进C.分析算法的易读性和文档性 (2) A .空间复杂度和时间复杂度B.正确性和简明性 &下面程序段的时间复杂度是0( n2) s =0; for( I =0; i

数据结构(c语言版)期末考试复习试题

《数据结构与算法》(c语言版)期末考复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位

B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

通讯录管理 数据结构

#include #include #include typedef struct{ char num[20]; char name[20]; char phone[20]; char addr[20]; }datatype; typedef struct node{ datatype data; struct node * next; }Listnode; typedef Listnode * Linklist; Linklist head; Listnode *p; int menu_select( ); Linklist Createlist(void); void Insertnode(Linklist head,Listnode *p); Listnode *Listfind(Linklist head); void Delnode(Linklist head); void Printlist(Linklist head); int main(){ for( ; ; ){ switch(menu_select() ){ case 1: printf(" ***********************************************\n"); printf(" ************** 通讯录链表的建立***************\n"); printf(" ***********************************************\n"); head=Createlist(); break; case 2: printf(" ***********************************************\n"); printf(" ************** 通讯录信息添加*****************\n"); printf(" ***********************************************\n"); printf(" ** 编号(4) 姓名(3) 电话(13) 地址(10)**\n"); printf(" ***********************************************\n"); p=(Listnode *)malloc(sizeof(Listnode)); scanf("%s%s%s%s",p->data.num,p->https://www.wendangku.net/doc/7511591693.html,,p->data.phone,p->data.addr); Insertnode(head,p); break; case 3: printf(" ******************************\n"); printf(" ******* 通讯录信息查询*******\n");

数据结构(C语言版)期末复习

数据结构(C语言版)期末复习汇总 第一章绪论 数据结构:是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 数据结构分为:逻辑结构、物理结构、操作三部分 逻辑结构:集合、线性结构、树形结构、图(网)状结构 物理结构(存储结构):顺序存储结构、链式存储结构 算法:是为了解决某类问题而规定的一个有限长的操作序列。 算法五个特性:有穷性、确定性、可行性、输入、输出 评价算法优劣的基本标准(4个):正确性、可读性、健壮性、高效性及低存储量 语句频度的计算。 算法的时间复杂度: 常见有:O(1),O(n),O(n2),O(log2n),O(nlog2n),O(2n) 第二章线性表 线性表的定义和特点: 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列。线性表中元素个数n(n≥0)定义为线性表的长度,n=0时称为空表。 非空线性表或线性结构,其特点: (1)存在唯一的一个被称作“第一个”的数据元素; (2)存在唯一的一个被称作“最有一个”的数据元素; (3)除第一个之外,结构中的每个数据元素均只有一个前驱; (4)除最后一个之外,结构中的每个数据元素均只有一个后继。 顺序表的插入:共计n个元素,在第i位插入,应移动(n-i+1)位元素。 顺序表的删除:共计n个元素,删除第i位,应移动(n-i)位元素。 线性表的两种存储方式:顺序存储、链式存储。 顺序存储 概念:以一组连续的存储空间存放线性表; 优点:逻辑相邻,物理相邻;可随机存取任一元素;存储空间使用紧凑; 缺点:插入、删除操作需要移动大量的元素;预先分配空间需按最大空间分配,利用不充分;表容量难以扩充; 操作:查找、插入、删除等 查找: ListSearch(SqlList L,ElemType x,int n) { int i; for (i=0;i

(完整版)通讯录管理系统数据结构毕业课程设计(C语言)

湖南工程学院课程设计报告 通讯录管理系统 姓名:李任

学院:计算机与通讯学院 专业:计算机科学与技术 班级:计算机0803班 指导教师:刘长松 目录 1.第一章:前言 (2) 2.第二章:概述 (3) 3.第三章:算法分析 (5) 4.第四章:主要流程图 (12) 5.第五章:程序源代码 (13) 6.第六章:测试及输出结果 (20)

7.第七章:课程设计体会 (23) 8.第八章:参考文献 (24) 第一章:前言 通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。 而C语言课程设计则对我们有以下几点帮助: 1. 进一步掌握和利用C语言进行程序设计的能力; 2. 进一步理解和运用结构化程序设计的思想和方法; 3. 初步掌握开发一个小型实用系统的基本方法; 4. 学会调试一个较长程序的基本方法; 5. 学会利用流程图或N-S图表示算法; 6. 掌握书写程设计开发文档的能力 (书写课程设计报告) 。 第二章:概述 一、本课程设计的目的和意义 本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。通讯录系统是在学校常见的计算机信息管理系统。它的主要任

务是对学生信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。 二、本课程设计主要内容 本系统有分7个功能:(1)写入数据(2)读取数据(3)追加数据(4)查找数据(5)备份数据(6)删除数据(7)还原数据。其主要利用结构类型,指针,数组,函数等C语言知识来实现。 第三章:算法分析 整个系统共分为8模块,主函数加7个子函数,从而实现7大功能:写入数据,读取数据,追加数据,查找数据,备份数据,删除数据,还原数据;各个程序的算法分析如下: (1)主函数main(): 利用for( ; ; )和switch()实现主界面的显示与各选项的连接; 流程图如下: (2)写入函数void input1(): 利用文件的fwrite()语句来实现数据的保存; 流程图如下: (3)读取数据void read1(): 利用文件的fread()语句来实现数据的读取;

数据结构课程设计通讯录的制作

数据结构课程设计通讯录 的制作 Modified by JEEP on December 26th, 2020.

软件学院 课程设计报告书 课程名称数据结构课程设计 设计题目通讯录的制作 专业班级软件工程XXXX 学号 XXXXXXXX 姓名 X X X 指导教师X X X 2012 年 01 月 目录 1、设计时间 (3) 2、设计目的 (3) 3、设计任务 (3) 4、设计内容 (3) 需求分析 (3) 总体设计 (4) 4.2.1本程序中用到的所有抽象数据类型的定义 (4) 4.2.2主程序的流程 (4) 详细设计 (6) 4.3.1定义的所有数据类型 (6) 4.3.2主函数 (11)

4.3.3函数的调用关系图 (12) 测试与分析 (13) 4.4.1测试 (13) 4.4.2分析 (19) 附录 (19) 5、总结与展望 (28) 参考文献 (29)

”4.4.2 m=n%HASHSIZE; ame); pp=p; while(H->elem[pp]!=NULL) { pp=collision(p,c); if(pp<0) { printf("createHash1第%d记录无法解决冲突",i+1); n",HASHSIZE,H->count); } void SearchHash1(HashTable* H,int c) { el); pp=p; while(H->elem[pp]!=NULL) { pp=collision(p,c); if(pp<0) { printf("第%d记录无法解决冲突",i+1); n",HASHSIZE,H->count); } void SearchHash2(HashTable* H,int c) { ame); printf("请输入第%d个记录的电话号码:\n",i+1); scanf("%s",a[i].tel); printf("请输入第%d个记录的地址:\n",i+1); scanf("%s",a[i].add); ame); for(i=0;i

数据结构 通讯录

数据结构课程设计报告 2010年01月03日

目录 1、需求分析 (3) 问题描述 (3) 基本要求 (3) 2、概要设计 (3) 数据结构 (3) 程序模块 (3) 3、详细设计 (4) 4、测试与分析 (8) 5、总结 (8) 6、附录(原程序清单) (10)

1.需求分析 数据结构课程主要是研究非数值计算的程序设计中所出现的计算机操作对象以及它们之间的关系和操作的学科。学习数据结构是为了将实际问题中所涉及的对象在计算机表示出来并对它们进行处理。通过课程设计可以提高思维能力、促进综合应用能力和专业素质的提高。 1.1问题描述 现代人社会交往越来越多,人们随身携带有通讯录,对通讯录进行必要的管理,对人们实现快速查询记录提供了极大的方便。考虑到要对通讯录进行快速检索,所以采用C语言来实现通讯录查找系统。要求的模块包括:插入、查找、删除、修改、保存。人机界面友好,使用图形化界面,菜单的选择用动画显示。 1.2基本要求 (1)输入的形式与输入值的范围 name 字符 phone 字符 ad 字符 (2)输出的形式 姓名、电话号码及住址以字符输出 (3)程序所能达到的功能 1)记录姓名、地址、电话项 2)查找并显示给定电话号码的记录 2.概要设计 1)数据结构 依据给定的通讯录信息和数据格式,链表结点必须用结构实现。结构类型的层次结构:typedef struct node {char name[20]; char ad[50]; char phone[20]; struct node *next; }slink; 2)程序模块 主函数 Main()

数据结构顺序表(电话通讯录)

数据结构用顺序表实现的电话通讯录(C语言) #include #include #include #include #define FALSE 0 #define ERROR 0 #define OK 1 #define INFEASIBLE -1 #define LIST_INIT_SIZE 10 #define LIST_INCREMENT 5 #define N 5 typedefint Status; typedefstruct { char name[10]; //姓名 char num[15]; //号码 }student; typedefstruct { student *elem; //存储空间基址 int length; //当前长度 intlistsize; //当前分配的存储空间(以sizeof(student)为单位) }Sqlist; Sqlist L; //定义全局变量L 为Sqllist类型 Status ListInsert(Sqlist&L,inti,student e) { //插入学生信息到顺序表L中 int j; student *newbase; if(i<1||i>L.length+1) return ERROR; //i值不合法 if(L.length>=L.listsize) //当前存储空间已满,增加分配 { newbase=(student *)realloc(L.elem,(LIST_INIT_SIZE+LIST_INCREMENT)*(sizeof(student))); if(!newbase) //存储分配失败 exit(OVERFLOW); L.elem=newbase; //新基址 L.listsize+=LIST_INCREMENT; //增加存储容量 } for(j=L.length;j>=i;j--) L.elem[j]=L.elem[j-1]; //插入位置及之后元素的右移 L.elem[i-1]=e; L.length++; return OK;

数据结构实验报告之通讯录的实现

数据结构实验报告之通讯录的实现 一、实验题目 利用线性表实现一个通讯录管理,通信录的数据格式如下: struct DataType { int ID; //编号 char name[10]; //姓名 char ch; //性别 char phone[13]; //电话 char addr[31]; //地址 }; 要求: ?实现通讯录的建立、增加、删除、修改、查询等功能 ?能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。 ?能够保存每次更新的数据(选作) ?能够进行通讯录分类,比如班级类、好友类、黑名单等等(选作) ?编写测试main()函数测试线性表的正确性 二、实验目的 1、熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法。 2、掌握线性表的操作的实现方法。 3、运用线性表解决实际问题。 三、实验内容 通过编写一个C++程序完成一个简易的通讯录管理系统,能够实现建立,增加,删除,修改,查找,浏览,输出,菜单等基本功能。管理系统中每个元素含有成员的ID、姓名、性别、电话、地址等信息。程序是使用链表的功能,通过一些算法简单的实现。 四、算法思路与主要代码 1. 通信录管理结构:建立,增加,删除,修改,查找,浏览,菜单。 2.建立通讯录 构造函数,建立头节点 PHONEBOOK::PHONEBOOK() { first = new DataType; first->next = first->prior = first; first->ID = 0; }

头插法,添加联系人 1:在堆中建立新结点 2:将 a[i]写入到新结点的数据域 3:修改新结点的指针域 4:修改头结点的指针域,将新结点加入链表中 即 1:Node * s=new Node 2:s->data=a[i] 3:s->next=front->next; 4:front->next=s 代码实现 void PHONEBOOK::Insert() { DataType *data = new DataType; data->next = first->next; data->prior = first; first->next = data; data->next->prior = data; m++; data->ID = m; 3.查找联系人 按姓名查找查找是指用户输入要查找的联系人的姓名,系统该函数内找到该联系人,返回该联系人数据域的指针,在主函数中输出该联系人的全部信息。 即1. 初始化工作指针p; 2. 循环以下操作直到p为空或找到用户 1. 如果p的数据等于i,则返回P的数据域指针; 2. P指针指向下一个节点; 3.若找不到返回空指针。 代码实现 void PHONEBOOK::Search() { cout << "请输入要查找的联系人的姓名:"; char aname[10]; cin >> aname; DataType *p = first->next; while (p) { //找到则输出信息 if (strcmp(p->name aname) == 0) {

大数据结构-通讯录管理系统地设计与实现

课程设计报告 课程设计名称:数据结构课程设计系:三系 学生姓名: 班级: 学号: 成绩: 指导教师: 开课时间:2011-2012学年一学期

宿迁学院 课程设计任务书 课程名称:数据结构 指导教师: 专业班级: 学生: 起止日期: 2012.12-2013.1

设计题目一:通讯录管理系统的设计与实现 1 概述 1.1现状分析 课程设计是实践教学中的重要环节,它以某一门课程为基础,涉及和课程相关的各方面知识,是一门独立于课程外的特殊课程。课程设计就是让所有同学对课程更全面的应用。本次实验项目“通讯录管理”就是针对数据结构的一门应用较为广泛的系统管理方法。 1.2 实现意义 本次实验应用性能很好,结构清楚,能随时添加、删除、查找、修改、输出联系人;并且可以用、编号两种方式;而且其中增加了排序功能,使得插入之后排序为接下来的操作提供便利,操作更精确,以人性化的方式展现出来,效果十分突出。 2 系统分析 编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含编号、、性别、、住址个人基本信息。用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。本程序相对简单,使用方便,几乎不用特殊的命令,只需按提示输入即可。对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,尤其在算法方面,链表及结点的联系,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。 3 概要设计 3.1算法的设计 本实验从整体上分为七大模块:(1)通讯录链表的建立;(2)通讯者结点的插入;(3)通讯者结点的查询;(4)通讯者结点的删除;(5)通讯者结点的修改;(6)通讯录链表的输出;(7)退出通讯录管理通讯者结点的删除系统。

数据结构课设 通讯录系统的设计与实现 哈希表

课程设计(论文)任务书 软件学院学院软件工程专业班 一、课程设计(论文)题目:通讯录管理系统的设计与实现——哈希表 二、课程设计(论文)工作自2016 年 1 月 4 日起至 2016 年 1 月 10 日止 三、课程设计(论文) 地点: 软件测试中心(北区测试二室) 四、课程设计(论文)内容要求: 1.本课程设计的目的 ⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合课程的理论知识,编写程序求解指定问题; ⑵初步掌握软件开发过程的问题分析、系统设计、编码、测试等基本方法和技能; ⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生的理论知识,提升编程水平。 2.课程设计的任务及要求 1)基本要求: ⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告; ⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率; ⑶程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释; ⑷每位同学需提交可独立运行的程序和规范的课程设计报告。 2)课程设计论文编写要求 ⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订; ⑵课程设计报告包括中文目录、设计任务、需求分析、概要设计、详细设计、编码实现、调试分析、课设总结、谢辞、参考文献、附录等; ⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。 3)课程设计评分标准: ⑴学习态度:10分; ⑵系统设计:20分; ⑶编程调试:20分; ⑷回答问题:20分; ⑸论文撰写:30分。

《数据结构(C语言描述)》期末试卷要点

专业 《数据结构(C 语言描述)》期末试卷 ( — 学年 第 学期) 一、填空(10分) 1、一个m 阶B-树中,每个结点最少有( ceil(m/2) )个儿子结点,m 阶B+树中每个结点(除根外)最多有( m )个儿子结点. 2、n(n>0)个结点构成的二叉树,叶结点最多有( floor((n+1)/2) )个,最少有( 1 )个。若二叉树有m 个叶结点,则度为2的结点有( m-1 )个。 3、顺序查找方法适用于存储结构为( 顺序表和线性链表 )的线性表,使用折半查找方法的条件是(查找表为顺序存贮的有序表 ) 4、广义表A=(( ),(a ,(b ,c)),d)的表尾Gettail(A)为( ((a,(b,c)),d) ) 5、直接插入排序,起泡排序和快速排序三种方法中,( 快速排序 )所需的平均执行时间最小;( 快速排序 )所需附加空间最大。 二、选择(10分) 1、倒排文件的主要优点是:( C ) A 、便于进行插入和删除 B 、便于进行文件的合并 C 、能大大提高基于非主关键字数据项的查找速度 D 、易于针对主关键字的逆向检索 2 下面程序段的时间复杂性为( C ) y=0; while(n>=(y+1)*(y+1)) { y++; } A 、O(n) B 、O(n 2) C 、 O(sqrt(n)) D 、 O(1) 3、若从二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是( C ) A 、二叉排序树 B 、哈夫曼树 C 、堆 D 、AVL 树 4、栈和队列都是( B ) A 、顺序存储的线性结构 B 、限制存取点的线性结构 C 、链式存储的线性结构 D 、限制存取点的非线性结构 5、用顺序查找方法查找长度为n 的线性表时,在等概率情况下的平均查找长度为( D ) A 、n B 、n/2 C 、(n-1)/2 D 、(n+1)/2 三、简答(30分) 1、已知一棵二叉树的前序扫描序列和中序扫描序列分别为ABCDEFGHIJ 和BCDAFEHJIG ,试给出该二叉树的后序序列并绘出该二叉树对应的森林。 院(系) 班级 姓名 学号 ……………………………………………装…………………………订………………………线……………………………………………

数据结构(c语言版)复习资料

数据结构复习资料 一、填空题 1. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。 2. 数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。 3. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。 4. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。 5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 6.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。 7. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有 1个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。 8. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。 9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引和散列。 10. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。 11. 一个算法的效率可分为时间效率和空间效率。

12. 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 13. 线性表中结点的集合是有限的,结点间的关系是一对一的。 14. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。 15. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。 16. 在顺序表中访问任意一结点的时间复杂度均为 O(1),因此,顺序表也称为随机存取的数据结构。 17. 顺序表中逻辑上相邻的元素的物理位置必定相邻。单链表中逻辑上相邻的元素的物理位置不一定相邻。 18.在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。 19.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。 20. 向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。 21. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。 22. 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 23. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。 24. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。

通讯录制作(数据结构课程设计)

课程设计报告 课程名称数据结构课程设计课题名称通讯录的制作 学院信息工程学院 姓名 学号 专业层次 班级 任课教师

目录 一、课程设计题目及所涉及知识点 (2) 二、课程设计思路及算法描述 (2) 设计思路 (2) 算法描述 (3) 三、课程设计中遇到的难点及解决办法 (4) 四、总结 (4) 五、结论 (4) 六、附录—主要源程序代码及运行结果 (4)

一、课程设计题目及所涉及知识点 设计题目:通讯录的制作 知识点:链表的增,删,改,查、基本的文件操作、字符数组的处理函数、分支结构和循环结构的熟练使用、结构体的定义与调用、函数的调用、结构体指针在各函数之间的调用。 二、课程设计思路及算法描述 设计思路:1、确定程序要实现的功能即(1)实现对数据文件的保存,对数据记录进行添加,可以对数据记录进行查询,可以对数据记录进行删除,可以对数据记录进行显示,可以对数据记录进行修改。 (2)在实现上述函数之后,设置分支结构,对操作进行选择。上述函数中有几种不同的操作需要用户按照自己的意愿选择。如,查询方式的选择,删除方式的 选择等。 2、确定程序所需要的功能块,存储结构-结构体,malloc申请存储空间,各 功能函数—对链表进行初始化line *initLine(line *p) ,对链表进行插入操作 line *insertLine(line *p), 将整理好的数据保存到文件内:saveFile(line *p), 姓名查询selectLine_name(),手机号查询selectLine_Id(),使用姓名进行修改 line *amendLine(),使用用手机号进行修改line *amendLine_num(),删除刚插入 的数据line *delLine(),指定名字删除int select_name(),指定手机号删除 select_ID(),具体执行删除的链表操作line *delLine(),显示链表数据display(),控制台程序主界面zcd(),返回函数fh(),主函数部分main();。 3、编写代码具体实现各项功能,并进行调试。 算法描述: 链表插入(Link List Insertion)的基本思想: 同顺序表一样,向链表中增添元素,根据添加位置不同,可分为以下 3 种情况:插入到链表的头部(头节点之后),作为首元节点;插入到链表中间的某个位 置;插入到链表的最末端,作为链表中最后一个数据元素;虽然新元素的插入位置 不固定,但是链表插入元素的思想是固定的,只需做以下两步操作,即可将新元素 插入到指定的位置: 1.将新结点的 next 指针指向插入位置后的结点; 2.将插入位置前结点的 next 指针指向插入结点; 算法实现: //p为原链表,elem表示新数据元素,add表示新元素要插入的位置 link * insertElem(link * p,int elem,int add){ link * temp=p;//创建临时结点temp //首先找到要插入位置的上一个结点 for (int i=1; inext; } //创建插入结点c link * c=(link*)malloc(sizeof(link));

数据结构c语言版期末考试复习试题

《数据结构与算法》复习题一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

哈希表制作通讯录数据结构程序设计

哈希表制作通讯录-数据结构程序设计

————————————————————————————————作者:————————————————————————————————日期:

软件学院 课程设计报告书 课程名称数据结构 设计题目哈希表制作通讯录 专业班级 学号 姓名 指导教师 2014年 1月

目录 1 设计时间 (1) 2 设计目的 (1) 3设计任务 (1) 4 设计内容 (1) 4.1需求分析 (1) 4.11程序所能达到的功能 (1) 4.12输入的形式和输入的范围 (1) 4.2总体设计 (1) 4.21说明本程序中用到的所有抽象数据类型的定义 (1) 4.22说明主程序的流程 (2) 4.23说明各程序模块之间的层次(调用)关系 (3) 4.3详细设计 (3) 4.31实现概要设计中定义的所有数据类型,对每个操作只需 要写出伪码算法 (3) 4.32对主程序和其它主要函数写出伪码算法 (4) 4.4测试 (5) 4.5 附录 (6) 5 总结与展望 (16) 参考文献 (18) 成绩评定 (18)

1 设计时间 2014年1月13日到2014年1月15号 2 设计目的 要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并上机调试的基本方法。这对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。 3设计任务 针对你所在班集体中的“人名”,设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查找过程。 4 设计内容 (1)每个人的信息至少包括姓名,电话,地址。至少包括对通讯录的创建,添加和按姓名查找等功能。 (2)假设人名为汉语拼音全拼形式,待插入哈希表的长度为你所在班级的人数。哈希函数用除留余数法构造,采用链地址法或二次探测再散列法解决冲突。 (3)完成菜单设计。操作有必要的提示。 4.1需求分析 4.11程序所能达到的功能 以人命的汉语拼音全拼形式查找你所在班级的人的信息(姓名,电话,地址) 4.12输入的形式和输入的范围 把人名都到转换成汉语拼音全拼的形式,人命最大长度不超过20个字符 4.2总体设计 4.21说明本程序中用到的所有抽象数据类型的定义 该程序采用的是结构体类型来处理学生的所有基本信息,如下所述。

数据结构教案C语言版

数据结构教案C语言版 Last updated on the afternoon of January 3, 2021

课程教案 课程名称:数据结构 授课教师: 学习对象: 任课时间: 一、学生情况分析 数据结构是计算机专业的一门核心专业课程。学生在前期的学习中已经学习了C语言程序设计课程。通过本课程学习使学生对提高编写程序的能力以及解决实际问题的能力。 二、课程教学目标 《数据结构》是计算机学科中一门核心专业基础课。主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价。通过本课程的学习,使学生深透地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养基本的、良好的程序设计技能,编制高效可靠的程序,为学习操作系统、编译原理和数据库等课程奠定基础。 三、课程教学内容 第一章绪论 教学内容: 1)什么是数据结构

2)抽象数据类型概念;数据类型;数据抽象与抽象数据类型;用于描述数据结构的语言 3)数据结构的抽象层次 4)算法定义 5)性能分析与度量;算法的性能标准;算法的后期测试;算法的事前估计;空间复杂度度量;时间复杂度度量;时间复杂度的渐进表示法; 教学要求: 了解:数据结构基本概念及数据结构的抽象层次 了解:抽象数据类型概念 了解:算法的定义及算法特性 掌握:算法的性能分析与度量方法 第二章线性表 教学内容: 1)线性表的定义和特点 2)线性表的顺序存储及查找、插入和删除操作 3)线性表的链式存储及查找、插入和删除操作 4)使用线性表的实例 教学要求: 了解:线性表的定义和特点 熟练掌握:线性表的顺序存储结构的查找、插入和删除等基本操作 熟练掌握:单链表、循环链表及双向链表的定义及实现 掌握:熟练掌握单链表的应用方法

相关文档
相关文档 最新文档