文档库 最新最全的文档下载
当前位置:文档库 › 通讯录管理系统数据结构C语言版链表实现实验报告

通讯录管理系统数据结构C语言版链表实现实验报告

通讯录管理系统数据结构C语言版链表实现实验报告
通讯录管理系统数据结构C语言版链表实现实验报告

Guangxi University of Science and Technology 课程设计报告

课程名称:数据结构与编程综合实训

课题名称:通讯录管理系统的设计与实现

姓名:熊信萌

学号: 201400402003

院系:计算机科学与通信工程学院

专业班级:通信 141 班

指导教师:周坚和

完成日期: 2015-12-18

目录

第一部分课程设计报告 (3)

第1章课程设计目的 (3)

第2章课程设计内容和要求 (3)

2.1 问题描述 (3)

2.2 设计要求 (4)

第3章课程设计总体方案及分析 (5)

3.1 问题分析 (4)

3.2 概要设计 (5)

3.3 详细设计 (6)

3.4 调试分析 (18)

3.5 测试结果 (18)

3.6 参考文献 (22)

第二部分课程设计总结 (23)

附录(源代码) (24)

第一部分课程设计报告

第1章课程设计目的

课程设计是实践教学中的重要环节,它以某一门课程为基础,涉及和课程相关的各方面知识,是一门独立于课程外的特殊课程。课程设计就是让所有同学对课程更全面的应用。本次实验项目“通讯录管理”就是针对数据结构的一门应用较为广泛的系统管理方法。

1. 实现意义

本次实验应用性能很好,结构清楚,能随时添加、删除、查找、修改、输出联系人;并且可以用姓名、编号两种方式;而且其中增加了排序功能,使得插入之后排序为接下来的操作提供便利,操作更精确,以人性化的方式展现出来,效果十分突出。

2. 系统分析

编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出、计算男女人数等功能。每个记录包含编号、姓名、性别、电话号码个人基本信息。用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。本程序相对简单,使用方便,几乎不用特殊的命令,只需按提示输入即可。对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,尤其在算法方面,链表及结点的联系,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。

第2章课程设计内容和要求

2.1问题描述:

设计并实现一个通讯录信息系统

●建立通讯录信息,信息包含编号、姓名、性别、电话;

●能够提供添加、删除和修改通讯录信息的功能;

●能够提供查询的功能;

●能够提供性别统计的功能;

●能够输出通讯录信息。

2.2设计要求:

要求设计程序输出如下:

用链表实现学生信息管理系统,完成链表建立(至少包括50个节点),以及链表中信息(节点)的插入、查找、删除、修改、输出等操作,具体的模块要求如下(用“文本文件”按照自定义格式存储数据记录集)。

第一个模块——主函数main()实现功能:根据菜单的选项调用各函数,并完成相应的功能。

第二个模块——Menu()实现功能:显示提示菜单。

第三个模块——Quit()实现功能:退出菜单。

第四个模块——Create()实现功能:创建新的学生信息记录。

第五个模块——Add()实现功能:增加新的学生信息记录,并返回菜单。

第六个模块——Find()实现功能:按要求查询相关的信息,如果找到则显示该学生信息,如果未找到则提示文件中没有该信息,并返回菜单。

第七个模块——Alter()实现功能:修改某条学生记录的信息,如果未找到要修改的学生记录,则提示系统中无此学生记录,并返回菜单。

第八个模块——Delete()实现功能:删除某条学生记录,如果未找到要删除的学生记录,则提示该学生记录集中没有,并返回菜单。

第九个模块——List()实现功能:能够分页显示数据记录集中的所有学生的记录。

第十个模块——Searchbysex()实现功能:统计通讯录中男性人数及女性人数

第3章课程设计总体方案及分析

3.1 问题分析:

该程序是要将几个不同功能的函数用链表串联起来,来组成一个通讯录信息系统。因为链表能让数据既有独立性又便于数据之间的相互联系,也便于数据的添加和删除。

用模块化程序设计的理念,对几个不同功能的函数,分块处理,这样有利于后期的调试及今后对功能的完善。

菜单中的每一个选项对应着一个子程序,这个系统就由这些子程序建立起来。

下面是这个程序的设计流程图:

主菜单

增加

删除修改查询统计输出退出

图3.1设计流程图

3.2 概要设计

1.①构建一个结构体用于建立一个链表。

②链表里面包括了要储存学生的信息的代号。

③屏幕上显示出菜单。

2.本程序包含8个函数:

(1)主函数 main()

(2)创建函数LinkList CreateList()

(3)增加通讯录人员函数void AddNode(LinkList head,ListNode *p)

(4)删除某个学生信息的函数 void DeleteNode(LinkList head)

(5)查询通讯录人员的函数ListNode *ListFind(LinkList head)

(6)修改通讯录人员的函数void AlterNode(LinkList head)

(8)通讯录输出函数void PrintList(LinkList head)

(9)退出系统函数

3.3 详细设计

实现概要设计中定义的所有数据类型及操作的伪代码算法

1.节点类型和指针类型

结构体里面的数据类型:

typedef struct //通讯录数据类型

{

char number[3]; //编号

char name[9]; //姓名

char sex[10]; //性别

char telephone[11]; //电话

} DataType

主函数

void main()

{

int k,j=1;

ListNode *l;

while(j)

{

printf("\t\t\t 熊信萌通讯录课程设计\n");

printf("\t\t\t********************************");

printf("\n\t\t\t 1.通讯录的建立");

printf("\n\t\t\t 2.通讯者的插入");

printf("\n\t\t\t 3.通讯者的查询");

printf("\n\t\t\t 4.通讯者的删除");

printf("\n\t\t\t 5.通讯者的修改");

printf("\n\t\t\t 6.通讯录的输出");

printf("\n\t\t\t 7.男生女生的人数");

printf("\n\t\t\t 0.退出通讯录管理系统");

printf("\n\t\t\t******************************");

printf("\n请选择菜单号(0--6):");

scanf("%d",&k);

getchar();

switch(k)

case 1:

{

printf("\n 1.通讯录的建立\n ");

head=CreateList( );

flag1=1;

break;

}

case 2:

{

if(flag1!=1)

{

printf("请先建立表!");

getchar();

}

else

{

printf("\n 2.通讯者信息的插入\n");

printf("\n编号姓名性别电话\n");

printf("--------------------------------------\n");

p=(ListNode *)malloc(sizeof(ListNode)); /*申请新结点*/

printf("输入编号:\n");

scanf("%s",p->data.number);

printf("输入姓名:\n");

scanf("%s",p->https://www.wendangku.net/doc/ab811262.html,);

printf("输入性别:\n");

scanf("%s",p->data.sex);

printf("输入电话:\n");

scanf("%s",p->data.telephone);

AddNode(head,p);

printf("排序:\n");

OrderList(l); //调用通讯录排序函数此处放在插入模块下面}

break;

}

case 3:

{

if(flag1!=1)

{

printf("请先建立表!");

getchar();

system("cls");

}

else

{

printf("\n 3.通讯录信息的查询\n");

p=ListFind(head);

if (p!=NULL)

{

printf("编号姓名性别联系电话\n");

printf("--------------------------------------------------\n");

printf("编号:%s\n姓名:%s\n性别:%s\n联系电话:%s\n",

p->data.number,p->https://www.wendangku.net/doc/ab811262.html,,p->data.sex,p->data.telephone);

printf("---------------------------------------------------\n");

}

else printf("没有查到要查询的通讯者!\n");

break;

}

case 4:

{

if(flag1!=1)

{

printf("请先建立表!");

getchar();

}

else

{

printf("\n 4.通讯录信息的删除\n");

DeleteNode(head); /*删除结点*/

}

break;

}

case 5:

{

if(flag1!=1)

{

printf("请先建立表!");

getchar();

system("cls");

}

else

{

printf("\n 5.通讯录信息的修改\n");

AlterNode(head);

}

break;

}

case 6:

{

if(flag1!=1)

{

printf("请先建立表!");

getchar();

}

else

{

printf("\n 6.通讯录链表的输出\n");

PrintList(head);

}

break;

}

case 7:

{

if(flag1!=1)

{

printf("请先建立表!");

getchar();

system("cls");

}

else

{

printf("\n 7.通讯录中男生女生的人数\n");

Seachbysex(head);

}

break;

}

case 0:

printf("是否退出(y/n)?");

k=getchar();

if(k=='y'||k=='Y')

{

j=0;

printf("\n\n\t\t\t谢谢使用!谢谢使用!");

printf("\n按任意键退出");

}

break;

default:

printf("\n 输入有错,请重新输入!\n");

printf("\n按任意键继续...");

getchar();

break;

}

}

}

}

2.通讯录信息系统的具体操作:

(1)添加:可以添加通讯录记录,依次输入编号、姓名、性别、电话号码后,会提示是否继续添加。

LinkList CreateList() //尾插法建立带头结点的通讯录链表算法

{

LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点

ListNode *p,*rear;

char flag='y'; //结束标志置y

rear=head; //尾指针初始指向头结点

while (flag=='y')

{

p=(ListNode *)malloc(sizeof(ListNode)); //申新结点

printf("编号姓名性别电话\n");

printf("-----------------------------------------------\n");

printf("输入的编号:\n");

scanf("%s",p->data.number);

printf("输入的姓名:\n");

scanf("%s",p->https://www.wendangku.net/doc/ab811262.html,);

printf("输入性别:\n");

scanf("%s",p->data.sex);

printf("输入电话:\n");

scanf("%s",p->data.telephone);

rear->next=p; //新结点连接到尾结点之后

rear=p; //尾指针指向新结点

printf("继续建表?(y/n):");

scanf("%s",&flag);

}

rear->next=NULL; //终端结点指针置空

return head; //返回链表头指针

}

开始

输入y或n

y n

用if判断输入

了y还是n

输入要输入

的资料

将数据保存到指

定的文件里

结束

图3.2添加通讯录记录流程

(2) 增加通讯录人员函数

void AddNode(LinkList head,ListNode *p)//在通讯录链表head中插入结点{

ListNode *p1,*p2;

p1=head;

p2=p1->next;

while(p2!=NULL && strcmp(p2->data.number,p->data.number)<0)

{

p1=p2; //p1指向刚访问过的结点

p2=p2->next; //p2指向表的下一个结点}

p1->next=p; //插入p所指向的结点

p->next=p2; //连接表中剩余的结点

开始

p1=head

p2=p1->next

N

p2!=NULL && strcmp(p2->data.number,p-

>data.number)<0

Y

p1=p2,

p2=p2->next;

p1->next=p;

p->next=p2;

结束

图3.3增加通讯录记录流程图

(3)删除通讯录信息函数:输入欲删除的那个人的编号或名字后,会自动删除他(她)的记录内容。

void DeleteNode(LinkList head) //通讯录链表上的结点删除

{

char s;

ListNode *p,*q;

p=ListFind(head); //调用查找函数

if (p==NULL)

{

printf("没有查到要删除的通讯者!\n");

return;

}

printf("%s %s %s %s\n",p->data.number ,p->https://www.wendangku.net/doc/ab811262.html,,p->data.sex,p->data.telephone);

printf("真的要删除该结点吗?(y/n) : ");

scanf("%s",&s);

if(s=='y')

{ q=head;

while(p!=NULL && q->next!=p)

q=q->next;

q->next=p->next;//删除结点

free(p); //释放被删除的结点空间

printf("通讯者已被删除!\n");

return;

}

printf("通讯者没有被删除!\n");

}

开始

输入删除姓名

判断通讯录是否有此人

N

输出”通讯录中没有此人”

Y

输出该项记录

结束

图3.4 删除通讯录记录流程图(4) 查询通讯录的函数:用姓名、编号两种方式查询。

ListNode *ListFind(LinkList head) //有序通讯录链表的查找{

ListNode *p;

char number[10];

char name[20];

char t;

printf("----------------\n");

printf(" 1. 按编号\n");

printf(" 2. 按姓名\n");

printf("----------------\n");

printf("请选择1/2: ");

p=head->next; //假定通讯录表带有结点

scanf("%d",&t);

if (t==1)

{

printf("请输入所求的编号:");

scanf("%s",number);

while(p && strcmp(p->data.number,number)<0)//优化的地方p=p->next;

if(p==NULL || strcmp(p->data.number,number)>0)

p=NULL; //没有查到要查找的通讯者

}

else

if (t==2)

{

printf(" 请输入要求的姓名:");

scanf("%s",name);

while(p&&strcmp(p->https://www.wendangku.net/doc/ab811262.html,,name)!=0)

p=p->next;

}

return p;

}

开始

输入查询的姓名

判断通讯录是否有此人

N

输出”通讯录中没有此人”

Y

显示该人所有记录

结束

图3.6 查询通讯录信息流程图

(5) 修改通讯录的函数:输入欲修改的那个人的名字后,再依次输入编号、姓名、性别、电话号码。

void AlterNode(LinkList head)//通讯录链表上的结点修改

{

char ch;

ListNode *p,*q1;

p=ListFind(head);

if(p==NULL)

{

printf("没有查到要修改的通讯者!\n");

return;

}

else if(p!=NULL)

{

printf("真的要修改该结点吗? (y/n)");

scanf("%s",&ch);

{

q1=head;

printf("\n输出新编号: ");

scanf("%s",p->data.number);

printf("输出新姓名: \n");

scanf("%s",p->https://www.wendangku.net/doc/ab811262.html,);

printf("输出新性别: \n");

scanf("%s",p->data.sex);

printf("输出新电话: \n");

scanf("%s",p->data.telephone);

printf("修改成功!\n");

}

if(ch=='n'||ch=='N')

printf("无需修改\n");

}

}

开始

输入修改的姓名

判断通讯录是否有此人

N

输出”通讯录中没有此人”

Y

依次输入修改的内容

结束

图3.7 修改通讯录信息

(6) 统计性别信息的函数:可以统计男性人数和女性人数。

void Seachbysex(LinkList head) {

ListNode *p; p=head;

int men=0,women=0; while(p!=NULL) {

if(strcmp(p->data.sex,"男")==0) men++;

if(strcmp(p->data.sex,"女")==0) women++;

p=p->next;

}

printf("women=%d\nmen=%d\n",women,men); }

图3.8统计性别信息流程图

3.菜单选择 int k,j=1; ListNode *l; while(j) { printf("\t\t\t 熊信萌 通 讯 录 课 程 设 计 \n"); printf("\t\t\t********************************"); printf("\n\t\t\t 1.通 讯 录 的 建 立 ");

printf("\n\t\t\t 2.通 讯 者 的 插 入 ");

开始

p!=NULL men=0,women=0

p=p->next Y

N

printf("women=%d\nmen=%d\n",women,men)

结束

N

strcmp(p->data.sex,"男")==0

N

if(strcmp(p->data.sex,"女")==0

men++

women++

Y

Y

printf("\n\t\t\t 3.通讯者的查询");

printf("\n\t\t\t 4.通讯者的删除");

printf("\n\t\t\t 5.通讯者的修改");

printf("\n\t\t\t 6.通讯录的输出");

printf("\n\t\t\t 7.男生女生的人数");

printf("\n\t\t\t 0.退出通讯录管理系统");

printf("\n\t\t\t******************************");

printf("\n请选择菜单号(0--6):");

scanf("%d",&k);

getchar(); 注:具体源代码见附录

3.4 调试分析

在写统计男女生人数的函数时,一开始只能显示出女生的人数,而且我也没有用到strcmp,所以一直遍历整个链表不成功,后来请教了同学了之后才写出统计的函数。原来开始没有把整个链表传入该函数中。

3.5 测试结果

1.主菜单:

2.建立通讯录:

3.显示通讯录信息:

4.删除某个通讯录信息

5.查询通讯录记录:

通讯录管理系统

课程设计任务书 题目C语言课程设计 系(部) 信息科学与电气工程学院 专业计算机科学与技术 班级计职141 学生姓名王雪 学号140819139 06 月21 日至07 月04 日共 2 周 指导教师 院长 2015 年6月23日

一、课程设计目的 将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++程序设计语言》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握结构化程序设计方法,熟悉面向对象程序设计方法。 (6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。 (7)进一步掌握在集成环境下如何调试程序和修改程序。 设计功能 录入联系人信息(包括姓名、电话号码、地址等信息);通讯录管理系统要求实现以下功能: 1、输入每一位联系人记录,将其信息存入文件中。 2、查询所有联系人的信息,并按可选的自定义规则进行排序; 3、记录修改,将修改的记录信息保存于文件中。 设计要求 1、设一个通信录由以下几项数据信息构成: 数据项类型 姓名字符串 地址字符串 邮政编码字符串 电话号码字符串 试为通信录数据定义类型和定义通信录变量,实现功能:存取、显示、删除记录、查询记录等功能。 2、要求:界面友好,易于操作 总体设计 系统功能模块图:

数据结构—链表应用能力测评

任务: 编写一个能向表尾插入结点,并输出链表中所有数据元素的小程序

#ifndef _LINKLIST #define _LINKLIST #include using namespace std ; struct node { int data ; struct node *next ; }; typedef struct node *PLIST; typedef struct node NODE; /*创建链表,并初始化链表元素*/ PLIST createList_link() { PLIST head ,tail ,temp; int elem = -1; head = new NODE; //初始化头结点 if( head == NULL) { cout<<"分配空间失败,链表创建失败"<next = NULL; tail = head ; while(1) { cin >> elem ; if(elem == 0 ) break ; temp = new NODE ; if(temp == NULL) { cout<<"分配空间失败,链表创建失败"<data = elem ; temp->next = NULL ; tail->next = temp ; tail = temp; } return head ;

} void printList_link(PLIST head ) { /*在此处完成任务,输出head为表头的单链表数据元素*/ //begin PLIST p =new NODE; p=head->next; while(p){ printf("%d ",p->data); p=p->next; } //end } void insertDataTail(PLIST head , int insData ) { /*在此处完成任务,在head为表头的单链表表尾插入数据元素insData*/ //begin PLIST p; p=head->next; while(p->next!=NULL){ p=p->next; } PLIST q = new NODE; //初始化结点 p->next=q; q->data=insData; q->next=NULL; //end } #endif

通讯录管理系统实验报告

通讯录管理系统实验报告 信息科学与技术学院《程序设计实习》实训报告书 目: 计算机科学与技术题 专业: 计算机科学与技术班级: 姓名: 学号: 同组人员: 指导老师: 设计时间: 目录 1.实训计 划 ..................................................................... ................................... 1 2.问题描 述 ..................................................................... ................................... 1 3.问题分 析 ..................................................................... ................................... 2 4.算法设 计 ..................................................................... ................................... 4 5.程序模块设 计 ..................................................................... ............................ 5 6.技术难点与分 析 ..................................................................... ........................ 8 7.系统测 试 ..................................................................... ................................... 9 8.心得体 会 .....................................................................

(完整版)数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1 .实验目的 (1 )掌握使用Visual C++ 6.0 上机调试程序的基本方法; (2 )掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2 .实验要求 (1 )认真阅读和掌握和本实验相关的教材内容。 (2 )认真阅读和掌握本章相关内容的程序。 (3 )上机运行程序。 (4 )保存和打印出程序的运行结果,并结合程序进行分析。 (5 )按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>// 头文件 #include// 库头文件------ 动态分配内存空间 typedef int elemtype;// 定义数据域的类型 typedef struct linknode// 定义结点类型 { elemtype data;// 定义数据域 struct linknode *next;// 定义结点指针 }nodetype; 2)创建单链表

nodetype *create()// 建立单链表,由用户输入各结点data 域之值, // 以0 表示输入结束 { elemtype d;// 定义数据元素d nodetype *h=NULL,*s,*t;// 定义结点指针 int i=1; cout<<" 建立一个单链表"<> d; if(d==0) break;// 以0 表示输入结束 if(i==1)// 建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));// 表示指针h h->data=d;h->next=NULL;t=h;//h 是头指针 } else// 建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t 始终指向生成的单链表的最后一个节点

题目通讯录管理系统

题目 2 通讯录管理系统 一.设计要求 1、问题描述 设有一通讯录,记录联系人的联系信息,包括联系人姓名、联系人多个联系电话、邮箱、联系地址以及所属群组。联系人按姓氏序列升序排列并按顺序编号。使用者能根据姓名或编号对联系人信息进行增删改查。请编制一程序模拟该通讯录的管理。 2、设计要求 1)基本要求 (1) 新建联系人。输入联系人的姓名、电话、email、地址和分组等信息, 并插入通讯录的正确位置。 (2) 编辑联系人。可修改、新增或删除联系人的电话、设置首个默认电话号 码、修改或删除email、地址和分组等信息。 (3) 删除联系人。可按姓名或序号删除联系人的信息。 (4) 查询联系人。可按姓名或序号查询联系人的信息并输出。 (5) 群组管理。可根据实际情况删除或新增分组,可为联系人分配群组或移 除群组,并可按群组查询联系人信息。 (6) 输出通讯录。按顺序输出通讯录的全部信息。 2)以下为选做: (7) 按姓名查询联系人时可进行模糊查询。 (8) 通过文件读写实现通讯录信息的读取和记录。 二.概要设计 1.主界面设计 为了实现通讯录管理系统,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主菜单运行界面如下图

所示。 2.存储结构设计 本系统主要采用链表结构类型存储联系人信息。 3.系统功能设计 本系统分为以下7个功能模块。 (1)添加联系人:添加联系人子模块可完成添加联系人姓名、电话、email、地址和分组等信息,并插入通讯录的正确位置。 (2) 编辑联系人。可修改、新增或删除联系人的电话、设置首个默认电话号码、修改或删除email、地址和分组等信息。 (3) 删除联系人。可按姓名或序号删除联系人的信息。 (4) 查询联系人。可按姓名或序号查询联系人的信息并输出。 (5) 群组管理。可根据实际情况删除或新增分组,可为联系人分配群组或移除群组,并可按群组查询联系人信息。 (6) 输出通讯录。按顺序输出通讯录的全部信息。 (7)可选择是否保存并退出系统。 三.模块设计

数据结构 单链表详解

数据结构的概念: 数据的逻辑结构+ 数据的存储结构+ 数据的操作; 数据的数值:=====》数据===》数值型数据整形浮点数ASCII 非数值型数据图片声音视频字符 =====》数据元素=====》基本项组成(字段,域,属性)的记录。 数据的结构: 逻辑结构 ----》线性结构(线性表,栈,队列) ----》顺序结构 ----》链式结构 ----》非线性结构(树,二叉树,图) ----》顺序结构 ----》链式结构 存储结构 -----》顺序存储 -----》链式存储 -----》索引存储 -----》哈希存储==散列存储 数据的操作: 增 删 改 查 DS ====》数据结构===》DS = (D,R); 数据结构中算法: 1、定义:有穷规则的有序集合。 2、特性: 有穷性 确定性

输入 输出 3、算法效率的衡量 时间复杂度计算===》算法中可执行依据的频度之和,记为:T(n)。 是时间的一种估计值不是准确值。 计算结果的分析:1 将最终结果的多项式中常数项去掉 2 只保留所有多项式中最高阶的项 3 最后的最高阶项要去掉其常数项 时间复杂度的量级关系: 常量阶====》对数阶===》线性阶===》线性对数阶====》平方阶===》立方阶===》指数阶 以上关系可以根据曲线图来判断算法对时间复杂度的要求 空间复杂度计算====》算法执行过程中所占用的存储空间的量级,记为:D(n)。 计算方法是在运行过程中申请的动态内存的量级计算。 ///////////////////////////////////////////////////////////////////////////////////////////////// 线性表 顺序存储====》顺序表(数组) 链式存储====》单链表 特征:对于非空表,a0是表头没有前驱。 an-1 是表尾没有后继 ai的每个元素都有一个直接前驱和直接后继 基本操作:创建表=====》增加元素====》删除元素====》改变元素值====》查询元素 1、顺序表的操作 1.1 创建顺序表=====》定义个指定类型的数组====》int a[100] ={0};

约瑟夫问题数据结构实验报告汇总.

中南民族大学管理学院学生实验报告 实验项目: 约瑟夫问题 课程名称:数据结构 年级: 专业:信息管理与信息系统 指导教师: 实验地点:管理学院综合实验室 完成日期: 小组成员: 2012 学年至2013 学年度第1 学期

一、实验目的 (1)掌握线性表表示和实现; (2)学会定义抽象数据类型; (3)学会分析问题,设计适当的解决方案; 二、实验内容 【问题描述】:编号为1,2,…,n的n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自 1 开始顺序报数,报到m 时停止报数。报m 的人出列,将他的密码作为新的m 值,从他在顺时针方向上的下一个人开始重新从1 报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。 【基本要求】:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 【测试数据】:m 的初值为20;密码:3,1,7,2,4,8,4(正确的结果应为6,1,4,7,2,3,5)。 三、实验步骤 (一)需求分析 对于这个程序来说,首先要确定构造链表时所用的插入方法。当数到m 时一个人就出列,也即删除这个节点,同时建立这个节点的前节点与后节点的联系。由于是循环计数,所以才采用循环列表这个线性表方式。 程序存储结构利用单循环链表存储结构存储约瑟夫数据(即n个人的编码等),模拟约瑟夫的显示过程,按照出列的顺序显示个人的标号。编号为1,2,…,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值 m,从第一个人开始按顺时针方向自1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m 值,从他在顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。基本要求是利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 程序执行的命令(1)构造单向循环链表。 (2)按照出列的顺序引出各个人的标号。 测试数据 m 的初值为 20;密码:3,1,7,2,4,8,4(正确的结果应为 6,1,4,7,2,3,5) (1)、插入:在把元素插入到循环链表中时,由于是采用的头插法,所以我保留了front头结点。在每加入一个节点时,都会直接连接在front后面,从而保证一开始就赋值的rear尾节点不用修改。 伪代码阐释如下:

通讯录管理系统需求分析

通讯录管理系统需求分析 项目编号:S1-BS-HTML-001 l项目概述 1.引言 1.1编写目的 在完成了针对通讯录管理系统的前期调查,同时与多位软件使用者进行了全面深入地探讨和分析的基础上,提出了这份软件需求规格说明书。 此需求规格说明书对《通讯录管理系统》软件做了通讯录管理系统的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。本说明书的预期读者为客户、业务或需求分析人员、测试人员、用户文档编写者、项目管理人员。 本说明书是整个软件开发的依据,它对以后阶段的工作起指导作用。本文也是项目完成后系统验收的依据。

1.2项目背景 本通讯录信息管理系统用计算机管理电子通讯录的一种计算机应用技术的创新,在计算机还未普及之前通讯管理都是由联系人采用名片,笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理。通讯录管理系统是典型的信息管理系统(mis),要求应用程序功能完备,易使用等特点。 1.3定义 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足合同、标准,规范或其它正式规定文档所需具有的条件或权能。 2.任务概述 2.1目标 实现通讯录管理系统的基本功能,可以实现电话用户的查询、电话号码的查询、电话号码所在地的查询、电话号码的添加及删除等功能,以方便人们的记录和通讯。 2.2运行环境 2.2.2.1服务端 A. 操作系统:Windows 2003 Server 2.2.2.2客户端 A. Windows 95/98/me/Xp/2000/2003, Unix, Linux,Vista,Mac OS各版 2.3条件与限制 本通讯录信息管理系统用计算机管理电子通讯录的一种计算机应用技术的创新,在计算机还未普及之前通讯管理都是由联系人采用名片,笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理。通讯录管理系统是典型的信息管理系统(mis),要求应用程序功能完备,易使用等特点。 3.数据描述 开始 3.1数据流图 以可读写的方式打开一个数据文件 将此文件的内容读出,并存入一个新的结构体类型的数组中。 调用menu()菜单函数

数据结构课程设计单链表

目录 1 选题背景 (2) 2 方案与论证 (3) 2.1 链表的概念和作用 (3) 2.3 算法的设计思想 (4) 2.4 相关图例 (5) 2.4.1 单链表的结点结构 (5) 2.4.2 算法流程图 (5) 3 实验结果 (6) 3.1 链表的建立 (6) 3.2 单链表的插入 (6) 3.3 单链表的输出 (7) 3.4 查找元素 (7) 3.5 单链表的删除 (8) 3.6 显示链表中的元素个数(计数) (9) 4 结果分析 (10) 4.1 单链表的结构 (10) 4.2 单链表的操作特点 (10) 4.2.1 顺链操作技术 (10) 4.2.2 指针保留技术 (10) 4.3 链表处理中的相关技术 (10) 5 设计体会及今后的改进意见 (11) 参考文献 (12) 附录代码: (13)

1 选题背景 陈火旺院士把计算机60多年的发展成就概括为五个“一”:开辟一个新时代----信息时代,形成一个新产业----信息产业,产生一个新科学----计算机科学与技术,开创一种新的科研方法----计算方法,开辟一种新文化----计算机文化,这一概括深刻影响了计算机对社会发展所产生的广泛而深远的影响。 数据结构和算法是计算机求解问题过程的两大基石。著名的计算机科学家P.Wegner指出,“在工业革命中其核心作用的是能量,而在计算机革命中其核心作用的是信息”。计算机科学就是“一种关于信息结构转换的科学”。信息结构(数据结构)是计算机科学研究的基本课题,数据结构又是算法研究的基础。

2 方案与论证 2.1 链表的概念和作用 链表是一种链式存储结构,链表属于线性表,采用链式存储结构,也是常用的动态存储方法。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 以“结点的序列”表示线性表称作线性链表(单链表) 单链表是链式存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。 因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 和 i 单链表 1、链接存储方法 链接方式存储的线性表简称为链表(Linked List)。 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link)) 注意: 链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。 2、链表的结点结构 ┌───┬───┐ │data │next │ └───┴───┘ data域--存放结点值的数据域 next域--存放结点的直接后继的地址(位置)的指针域(链域) 注意: ①链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。 ②每个结点只有一个链域的链表称为单链表(Single Linked List)。

c语言通讯录管理实验报告及源程序代码

C语言程序设计实训报告 课程名称 C语言程序设计实训 课题名称通讯录管理 专业软件工程 班级 K软件151 学号 姓名 指导教师 2016年 1 月 1 日

湖北汽车工业学院科技学院 C语言程序设计实训任务书 课程名称 C语言程序设计实训 课题通讯录管理 专业班级软件工程 学生姓名 学号 指导老师 审批

一、设计内容与设计要求 1.设计内容: 设计课题:通讯录管理 一、问题描述: 该设计实现对通讯录得管理功能,具体包括从键盘输入通讯录的信息、从指定的文件中读入通讯录的信息、按姓名查询通讯录的信息、按分类查询通讯录的信息、删除指定姓名的通讯录的信息、将通讯录信息保存在指定的文件中等。 二、功能要求: 1)能从键盘输入通讯录的信息(增加,输入时需要能检查该姓名的通讯录 的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输 入的类型是否存在) 2)能从指定的文件中读入通讯录的信息 3)能按姓名查询通讯录的信息 4)能按分类查询通讯录的信息 5)能删除指定姓名的通讯录的信息 6)能将通讯录信息保存在指定的文件中 7)所有数据符合实际应用要求 2.设计要求: 1)设计正确,方案合理。 2)界面友好,使用方便。 3)程序精炼,结构清晰。 4)上机演示。 3.设计报告要求: 课程设计报告格式如下: 1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。 2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。 3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。 二、进度安排

数据结构停车场问题实验报告汇总

数据结构课程设计 ——停车场管理问题 姓名: 学号: 问题描述 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的

车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。 二、实现要求 要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。 三、实现提示 汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(‘A',,1,5)表示1号牌照车在5这个时刻到达,而(‘ D ',,5,20)表示5号牌照车在20这个时刻离去。整个程序可以在输入信息为(‘ E ',0,0)时结束。本题可用栈和队列来实现。 四、需求分析 停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。停车场的管理流程如 下 ①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。 ②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。当车辆出栈完毕后,检查等候队列(便道) 中是否有车,有车则从队列头取出一辆车压入栈中。

管理信息系统-通讯录管理系统

昆明理工大学管理信息系统课程设计通讯录管理系统 学院计算机科学与技术学院 姓名黄亚军 学号200910405229 指导教师姓名王剑 2012年05月27日

昆明理工大学管理信息系统课程设计 (1) 摘要 参考文献 (25)

摘要: 通讯录管理系统是每一个用户管理通讯录的不可缺少的一个管理信息系统,它的内容对于用户的管理者来说是至关重要的,所以通讯录管理系统应该能够为每一个用户的管理者提供充足的信息和快捷的查询手段,大大的方便用户合理的管理通讯录。 随着科学技术的不断提高,计算机科学日渐成熟,网上通讯工具的迅速发展,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对通讯录进行管理,具有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高通讯录管理的效率,也是用户理财的科学化、正规化管理,与先进科学技术接轨的重要条件。 因此,开发这样一套管理软件成为很有必要的事情,对于我们即将计算机专业毕业的学员来说,也是一次将计算机应用于现实管理的一次很有意义的实践活动。 关键词:通讯录管理信息系统计算机科学用户 一、前瞻 1.开发背景简介 随着信息活动在国民经济中主导地位的确立和信息产业的崛起信息资源管 理(Informetion Resouces Management,简称IRM)作为一个专有名词和独立的学科逐渐发展起来。如何积极开发、合理配置和有效利用信息资源,日益成为社会生活中亟待解决的问题。由于计算机和通信技术的高速发展,推广应用计算

数据结构(C语言)单链表的基本操作

实验名称:实验一单链表的基本操作 实验目的 熟练掌握线性表两类存储结构的描述方法。 实验内容 从键盘读入若干个整数,建一个整数单链表,并完成下列操作: (1)打印该链表; (2)在链表中插入一个结点,结点的数据域从键盘读入,打印该链表; (3)在链表中删除一个结点,被删结点的位置从键盘读入,打印该链表; (4)在链表中做查找:从键盘读入要查找的整数,将该整数在链表中的位置打印出来,若要查找的整数不在链表中,返回一个信息。 算法设计分析 (一)数据结构的定义 单链表存储结构定义为: struct Node; typedef struct Node * pnode; struct Node { int info; pnode link; }; typedef struct Node * LinkList; (二)总体设计 程序由主函数、创建单链表函数、链表长度函数、链表打印函数、插入正整数函数、删除函数、查询函数组成。其功能描述如下: (1)主函数:调用各个函数以实现相应功能 int main(void) //主函数 { printf("单链表的基本操作实验:\n"); struct list *pnode; pnode = creat(); //创建 print(pnode); //输出 insert(pnode); //插入 print(pnode); //输出 _delete(pnode); //删除 print(pnode); //输出 _located(pnode); //查找 print(pnode); //输出 return 0 ; } (三)各函数的详细设计: Function1: struct list *creat()//创建链表;

简单的通讯录实验报告

( 二〇一二 年 十 月 课程设计说明书 本科毕业设计 题 目:简单通讯录程序 学生姓名:李天罡 学 院:工学院 专 业:数字媒体技术 班 级:2011级 指导教师:王金祥

目录 引言 (3) 第一章需求与分析...................................... I 1.1开发环境 ....................................................................................................... I 1.1.1软件环境 ........................................................................................................... I 1.1.2硬件环境 ........................................................................................................... I 1.1.3开发平台 ........................................................................................................... I 1.2功能需求 ....................................................................................................... I 1.2.1数据字段 ........................................................................................................... I 1.2.2主要功能 ........................................................................................................... I 第二章总体设计 ...................................... II 2.1流程图 ......................................................................................................... II 2.2主要模块功能介绍 .................................................................................... III 2.2.1选择模块 ........................................................................................................ III 2.2.2增添删减模块 ................................................................................................ III 2.2.3查询模块 ........................................................................................................ I V 2.2.4排序模块 ........................................................................................................ I V 第三章详细设计 ...................................... IV 3.1源代码 ........................................................................................................ I V 第四章实体机测试..................................... XV 4.1测试的目标 ..................................................................................................... XV 4.2测试方法 ......................................................................................................... XV 4.3测试结果 ........................................................................................................ XVI 总结 .............................................. XXIII

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

C语言通讯录管理系统程序代码

一、课程设计题目及要求 题目通讯录管理系统 任务:自学C语言中相关知识,设计出通讯录管理系统。要求如下所述: ◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子 邮箱等;; ◆能够提供添加、删除和修改通讯录信息的功能; ◆能够提供按姓名或电话等查询; ◆将通讯录保存在文件中; ◆能够按表格方式输出通讯录信息。 二、系统设计方案 (一)总体框架图: 通讯录管理系统:1、录入通讯录信息 2、修改通讯录信息 3、查询通讯录信息 4、浏览通讯录信息 5、增加通讯录信息 6、推出系通讯录统 (二)模块设计 模块一:头文件,变量定义,函数的声明 对系统所使用的变量进行定义,对函数进行声明 模块二:录入通讯录信息 声明函数void readfile(),说明一个文件指针FILE *fp 打开文件"student.txt" 模块三:通讯录信息的查找 声明void seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支 模块四:通讯录信息的修改

声明void modify()为学生信息修改函数,通过switch(item)设定所要修改的项目模块五:通讯录信息按学号排序 声明void sort()将录入通讯录信息系按升序排列,用的是“冒泡排序法”实现排序模块六:加通讯录信息 声明void insert()插入通讯录信息,先通过判断通讯录是否存在,若否则继续输入,若是跳出,重新循环 模块七:通讯录信息 声明void del()实现通讯录信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。 模块八:示学生信息 通过display()函数输出通讯录信息 模块九;存信息 通过fp=fopen("student.txt","w");写入信息 模块十:界面菜单 通过switch(num)调用,以上各函数,实现功能 三、设计详情 1.主函数 主函数设计要求简洁,只提供部分提示语和函数的调用 【程序】

数据结构与算法问题分析与源代码之单链表

单链表 1 题目编写一个程序,实现链表的各种基本运算,包括:链表操作:初始化链表、输出链表、输出链表长度和释放链表链表元素操作:插入元素、删除元素、输出元素(注意元素的位置) 2 目标熟悉单链表的定义及其基本操作的实现 3 设计思想 链表由多个结点通过next 指针连接成一个完整的数据结构,每个几点包括一个数据域和一个指向下一个结点的next 指针。通过对指针的改写与结点的增减,我们可以实现单链表的插入、删除、输入、输出、求长等操作。 4 算法描述 (1 )初始化链表:输入元素个数n ,分配n 个结点空间,输入元素值,按元素顺序初始化next 指针,使之连接成串,尾指针赋值NULL 。 (2 )输出链表:从表头开始沿next 指针遍历各结点,每次访问结点输出结点数据值,直至next 为空。 (3 )输出链表长度:从表头开始沿next 指针遍历各结点,每次访问结点计数器加一,直至next 为空,返回计数器值。 (4 )释放链表:沿next 指针从前向后依次释放结点,直至next 指空。 (5 )插入元素:指针沿next 指向移动指定位,新分配一个空间并存入数据,其next 赋值为当前指针指向结点的next ,修改当前指针指向结点的next 指向新加结点。 (6 )删除元素:指针沿next 指向移动指定位,修改待删结点的前一结点的next 指针指向待删结点的下一结点,保存数值,释放删除结点。 (7 )输出元素:指针沿next 指向移动指定位,指针指向结点数据区,读出数值返回。 5 程序结构图 6源程序 #i nclude

#i nclude typedef struct LNode { int data; struct LNode *n ext; }LNode,*Li nkList; Lin kList Ini tList_Li nk(L in kList L) { L=(L in kList)malloc(sizeof(LNode)); L->data = 0; L->next = NULL; return L; } void Createlist(L in kList L) { int n; int i; int temp; LinkList T; printf(" 输入链表元素个数:"); scanf("%d",&n); L->data=n; printf(" 输入元素值:\n"); T=L; for (i=n;i>0;i--) { LinkList p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&temp); p->next=T->next; p->data = temp; T->next=p; T=p; L->data++; } printf(" 成功建立链表"); } void DestroyList_Link(LinkList L) { LinkList p = L,q = L; while(p) { p = p->next; free(q);

Android实验报告_基于SQLite的通信录

第一次实验Android界面设计 一. 实验目的及实验环境 1. 实验目的 1)掌握SQLiteOpenHelper类结构 2)掌握基于SQLite数据库的应用开发过程 3)掌握Content Provider发布数据的方法 4)掌握Content Resolver获取数据的方法 2.实验环境 系统开发平Android Studio 3.0 系统开发平台:Android 7.1 运行平台:Windows10 x64 运行环境:https://www.wendangku.net/doc/ab811262.html, Framework SDK 2.0 二. 实验教材、组织方式、实验内容 1.实验教材:Andorid开发与应用 2.组织方式:个人独立完成 2.实验内容: 实现基于SQLite数据库的通信录应用,通过单击增加图标打开添加通信录界面,通过单击通信录中的各条信息可删除选中项。 三.方案设计 Android系统中集成了SQLite数据库,并且为数据库的操作提供了相关的类和方法,便于没有数据库开发经验的开发者编写程序。另外,Android平台中利用Content Provider机制来实现跨应用程序数据共享。一个应用程序可以通过Content Provider来发布自己的数据,其他的应用程序可以通过Content Resolver 来获取共享数据。

四.运行结果

五.总结 通过这次实验掌握了SQLite OpenHelper类结构,掌握了基于SQLite数据库的应用开发过程以及Content Provider发布数据的方法和掌握Content Resolver获取数据的方法。 六.附录:源代码 主布局文件activity_main.xml:

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