线性表通讯录实验
数据结构实验(二) 线性表
南通大学数据结构实验(二)线性表姓名:金凯班级:软件工程121学号: 1102052019时间:2013年10月12日1.试验目的1. 掌握线性表的逻辑特性。
2. 分析问题的特性,选择合适的存储结构。
3. 根据存储结构的特性,设计算法。
4. 认真学习《数据结构实践教程》P403 附录 A“实验报告示例”,掌握该课程实验报告要求,写出合格的报告。
2、实验任务1.实验内容选项(1)实验书P339 2.4 一元多项式求导问题(2)用线性表实现一个通讯录的基本操作:创建、插入记录、删除记录、添加记录、查找记录、浏览记录。
2.按要求形成实验报告(电子文档)。
3.将实验报告(电子文档)、源程序与运行截图打包形成文件:实验二 - 软件工程1102052019-金凯.zip3、问题描述序号求解问题1.求一元多项式P n(x)=P0+P1x+ P2x2+```+ P n x n的一阶导数。
2.用线性表实现一个通讯录的基本操作:创建、插入记录、删除记录、添加记录、查找记录、浏览记录。
4、数据结构设计①问题一求一元多项式P n(x)=P0+P1x+ P2x2+```+ P n x n的一阶导数。
一元多项式是个和式,其中每一项由系数和指数幂确定。
因此,可用下列线性表来表示:((p1,e1),(p2,e2),……(p n,e n))。
线性表的每个元素含有两个数据项:一个数据p,另一个指数幂e。
存储结构链式,顺序式均可。
若为链式存储,结点结构如下:coef exp next其中:coef为系数域,存放非零项的系数;Exp为指数域,存放非零项的指数;next为指针域,存放指向下一结点的指针。
②问题二用线性表实现一个通讯录的基本操作:创建、插入记录、删除记录、添加记录、查找记录、浏览记录。
通讯录可以看成一个单向链表,其中每一个结点就是一个人名和电话数据。
这里采用链式存储,结点结构如下:name[10] number next其中:name为联系人的姓名,存放的是字符串;Number为联系人的电话号码,存放的是double型的数据。
线性表 员工通讯录管理系统
员工通讯录管理系统用线性表制作员工通讯录管理系统:头文件:ehead.h#include <stdio.h>#include <string.h>#include <stdlib.h>#include <windows.h>#include <conio.h>extern void mainmenu(); //主菜单extern void project();extern void input(); //信息输入extern void search(); //信息查找extern void change(); //信息修改extern void insert(); //信息插入extern void Delete(); //信息删除extern void save(); //信息保存extern void lead(); //信息导出main函数:# include "ehead.h"int main(){system("cls");system("color 5e");printf("\n\n\n\n\n\n\n\n\t\t▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼\n");printf("\t\t\t\t\t员工通讯录管理系统\n");printf("\t\t▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲\n\n");printf("\t\t\t\t\t ☆☆☆☆☆☆☆☆☆☆☆\n\n");printf("\t\t\t\t\t 欢迎使用\n\n");printf("\t\t\t\t\t ☆☆☆☆☆☆☆☆☆☆☆\n\n");printf("\t\t\t\t\t");system("pause");mainmenu();getchar();return 0;功能函数部分:# include "ehead.h"FILE *fp;typedef struct /*员工通讯信息的结构类型定义*/ {char num[5]; /*员工编号*/char name[10]; /*员工姓名*/char phone[15]; /*办公室电话号码*/char call[15]; /*手机号码*/char e_mail[30]; /*电子邮箱*/}DataType;typedef struct node{DataType data; /*结点的数据域*/struct node *next; /*结点的指针域*/}ListNode,*LinkList;node *head,*p,*q,*e;/*******信息输入******/int b;int i=0;char sele;void input(){head=(ListNode *)malloc(sizeof(ListNode));head->next=NULL;q=head;printf("请输入员工数: ");scanf("%d",&b);printf("\n\n\t\t\t***输入信息***\n");for(i=0;i<b;i++){system("cls");p=(LinkList)malloc(sizeof(ListNode));printf("\n\n\t\t\t员工编号:");scanf("%s",&p->data.num);printf("\n\t\t\t员工姓名:");scanf("%s",p->);printf("\n\t\t\t办公室电话:");scanf("%s",&p->data.phone);printf("\n\t\t\t手机号码:");scanf("%s",&p->data.call);printf("\n\t\t\t电子邮箱:");scanf("%s",&p->data.e_mail);q->next=p;q=p;q->next=NULL;getchar();}//显示信息部分printf("\n\n\t员工编号\t员工姓名\t办公室电话\t手机号码\t 电子邮箱\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");p=head->next;while(p){printf(" %-5s %-10s %-15s %-15s %-30s",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ma il);printf("\n");if(p->next==NULL){break;}p=p->next;}printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");//返回主菜单部分printf("\t\t\t\t\t是否确定信息(y/n):");scanf("%c",&sele);if(sele=='y')system("cls");mainmenu();}/******信息查询******/void search(){int m; //m设为选择方式p=head->next;printf("\n\n\t\t\t**查询通讯录记录**\n");printf("\n\t\t\t请选择查询方式:\n");printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t# 1------编号#\n");printf("\t\t\t# 2------姓名#\n");printf("\t\t\t# 0------返回主菜单#\n");printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t请选择:");scanf("%d",&m);if(m==1)goto A;if(m==2)goto B;if(m==0)system("cls");mainmenu();char c[5];int a;A: system("cls");node *p;p =head->next;printf("\n\n\n\n\n\n\n\t\t\t================================ ================\n");printf("\t\t\t\t请输入你要查找的员工编号: ");scanf("%s",&c);for(a=0;a<=b;a++){if(strcmp(p->data.num,c)==0){printf("\n\n\t员工编号\t员工姓名\t员工电话\t 员工手机\t\t电子邮箱\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" %-5s %-10s %-15s %-15s %-30s",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ma il);printf("\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t\t是否返回主菜单(y/n):");scanf("%s",&sele);switch(sele){case 'y':system("cls");mainmenu();break;case 'n':system("cls");search();break;}}p=p->next;}B:system("cls");p =head->next;printf("\n\n\n\n\n\n\n\t\t\t=================================== =============\n");printf("\t\t\t\t请输入你要查找的员工姓名: ");scanf("%s",&c);for(a=0;a<=b;a++){if(strcmp(p->,c)==0){printf("\n\n员工编号\t员工姓名\t员工电话\t 员工手机\t\t电子邮箱\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" %-5s %-10s %-15s %-15s %-30s",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ma il);printf("\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("是否返回主菜单(y/n):");scanf("%s",&sele);switch(sele){case'y':system("cls");mainmenu();break;case'n':system("cls");search();break;}}p=p->next;};}/******修改信息******/void change(){int m=0;int a,f;node *p;C:char c[5];p =head->next;printf("\n\n\n\n\n\n\n\t=================================== =============\n");printf("\t请输入你要查找的员工编号或姓名: ");scanf("%s",&c);for(a=0;a<b;a++){//printf("%d",b);if(strcmp(p->data.num,c)==0||strcmp(p->,c)==0){printf("\n\n\t员工编号\t员工姓名\t员工电话\t 员工手机\t\t电子邮箱\n");printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" %-5s %-10s %-15s %-15s %-30s",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ma il);break;printf("\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~\n");}p=p->next;}D: if(b=0){printf("没有此人信息");}else{printf("\n\n\t\t\t**修改通讯录记录**\n");printf("\t\t\t1.---确认修改\n");printf("\t\t\t2.---返回重新查找\n");printf("\t\t\t**********************\n");printf("\t\t\t请选择:");scanf("%d",&f);if(f==1){system("cls");printf("%d",b);printf("AAA");E: printf("\n\n\n\t\t请输入修改后的员工信息\n");printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("员工编号:");scanf("%s",p->data.num);printf("\n员工姓名:");scanf("%s",p->);printf("\n办公室电话:");scanf("%s",p->data.phone);printf("\n手机号码:");scanf("%s",p->data.call);printf("\n电子邮箱:");scanf("%s",p->data.e_mail);}if(f==2)//system("cls");goto C;}printf("\n\n员工编号\t员工姓名\t员工电话\t 员工手机\t\t 电子邮箱\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~\n");printf(" %-5s %-10s %-15s %-15s %-30s",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ma il);printf("\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~\n");printf("是否确定修改信息(y/n): ");scanf("%s",&sele);switch(sele){case'y':system("cls");mainmenu();break;case'n':system("cls");change();break;}}/******信息插入******/void insert(){int j;node *p;F:// head=(LinkList)malloc(sizeof(ListNode));printf("\n\t\t\t**插入通讯录记录**\n");p=(LinkList)malloc(sizeof(ListNode));printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\n请输入员工信息:");printf("\t\t员工编号: ");scanf("%s",&p->data.num);printf("\t\t\t员工姓名: ");scanf("%s",p->);printf("\t\t\t手机号码: ");scanf("%s",&p->data.phone);printf("\t\t\t电话号码: ");scanf("%s",&p->data.call);printf("\t\t\t电子邮箱: ");scanf("%s",&p->data.e_mail);p->next=head->next;head->next=p;printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t\t****插入成功!***\n");printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t\t是否继续插入信息(y/n): ");scanf("%s",&sele);switch(sele){case'y':system("cls");insert();break;case'n':system("cls");mainmenu();break;}}/******删除信息******/void Delete(){system("cls");node *p,*x;p =head->next;int m=0;char s[5];printf("请输入要查找的编号:");scanf("%s",&s);for(int k=0;k<b+1;k++){if(strcmp(p->data.num,s)==0){b++;printf("\n\n\t员工编号\t员工姓名\t员工电话\t 员工手机\t\t电子邮箱\n");printf("\t*************************************************** **********************************\n");printf(" %-5s %-10s %-15s %-15s %-30s",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ma il);printf("\n");printf("\t*************************************************** **********************************\n");break;}p=p->next;}if(m!=0){}else{//printf("没有该信息!");}int g;printf("\n\n\t\t\t1.确认删除\n\t\t\t2.返回菜单\n"); printf("请选择: ");scanf("%d",&g);switch(g){case 1:{p =head->next;x = p;while(p->next&&(strcmp(p->data.num,s)!=0)){x = p;p=p->next;}if(p->next){x->next=p->next;free(p);printf("\n****删除成功!****\n");}else if(p->next==NULL){x->next=NULL;printf("\n****删除成功!****\n");}elseprintf("\n!");system("cls");system("pause");mainmenu();}break;case 2:system("cls");mainmenu();break;}}/******信息保存******/void save(){FILE *fp;int i;if((fp=fopen("Employee directory.txt","wb"))==NULL) {printf("cannot open this Employee directory.\n");exit(1);}if(head==NULL)printf("错误");p=head;p=p->next;do{fprintf(fp," %-5s %-10s %-15s %-15 s %-30s\n",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ mail);p=p->next;}while(p!=NULL);fclose(fp);printf("\n\t\t\t员工通讯录已保存\n");/* printf("是否返回主菜单(y/n): ");scanf("%s",&sele);switch(sele){case 'y':system("cls");mainmenu();break;case 'n':system("cls");save();break;}*/system("pause");mainmenu();}/******信息输出******/void lead(){FILE *fp;int t;fp=fopen("Employee directory.txt","rb");head=(ListNode *)malloc(sizeof(ListNode));head->next=NULL;q=head;for(int i=0;i<b;i++){p=(ListNode *)malloc(sizeof(ListNode));fscanf(fp," %-5s %-10s %-15s %-15s %-30s\n",p->data.num,p->,p->data.phone,p->data.call,p->data.e_ mail);q->next=p;q=p;q->next=NULL;}fclose(fp);printf("\n\t\t\t员工通讯录已导入\n");/*printf("是否返回主菜单(y/n): ");scanf("%s",&sele);if(sele=='y' ){system("cls");mainmenu();}else{}*/system("pause");mainmenu();}。
数据结构线性表实验报告
《数据结构》实验报告专业:学号:姓名:实验二线性表【实验目的】1.熟悉VC环境,学习如何使用C语言实现线性表的两种存储结构。
2.通过编程、上机调试,进一步理解线性表的基本概念,东运用C语言实现线性表基本操作。
3.熟练掌握线性表的综合应用问题。
【实验内容】1、一个线性表有n个元素(n-MAXSIZE.MAXSIZE指线性表的最大长度),且递增有。
现有一元素x要插入到线性表的适当位置上,并保持线性表原有的顺序不变。
设计程序实现。
要求:采用顺序存储表示实现;采用链式存储表示方法实现:比较两种方法的优劣。
2.从单链表中删除指定的元素x,若x在单链表中不存在,给出提示信息。
要求:①指定的值x由键盘输入;②程序能处理空链表的情况。
3.设有头结点的单链表,编程对表中的任意值只保留一个结点,删除其余值相同的结点。
要求:①该算法用函数(非主函数)实现;②在主函数中调用创建链表的函数创建一个单链表,并调用该函数,验证算法的正确性。
LinkedList Exchange(LinkedList HEAD,p)//HEAD是单链表头结点的指针,p是链表中的一个结点。
本算法将p所指结点与其后继结点交换。
(q=head->next;//q是工作指针,指向链表中当前待处理结点。
pre=head;//pre是前驱结点指针,指向q的前驱。
while(q'=null &&q1=p)(pre=q;q=q->next;]/未到p结点,后移指针。
if(p->next==null)printf(“p无后继结点\n”);/p是链表中最后一个结点,无后继。
else/处理p和后继结点交换(q=p->next;//暂存p的后继。
pre->next=q://p前驱结点的后继指向p的后继。
p->next=q->next;//p的后继指向原p后继的后继。
q->next=p://原p后继的后继指针指向p。
数据结构实验报告2--通讯录
一、实验目的1、能够利用单链表的基本运算进行单链表的相关操作。
2、加深对链式存储数据结构的理解,逐步培养解决实际问题的编程能力。
3、熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的建立、查找、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。
二、实验环境具有Windows XP或2003的计算机、V istual C++ 6.0、网络环境。
三、实验内容设计一个班级同学的通讯录,要求如下:✓通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。
如果需要更多其他信息,请自行添加。
✓程序主菜单包含以下几个功能:(1)添加记录:通过键盘输入信息,添加一条通讯录记录。
(2)删除记录:通过键盘输入学号,删除该学号的记录。
(3)输出记录:输出通讯录全部记录。
(4)按姓名查找:通过键盘输入姓名,输出该同学的所有信息。
(5)按电话号排序:按电话号码从小到大排序并输出排序后的信息。
(6)清空记录:删除通讯录中的全部记录,并删除文件。
(7)退出。
程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 20typedef struct student{char tel[N];char name[N];char id[N];struct student *next;}linklist;//创建信息void createlist(linklist *&l){int ch;linklist *s,*p;printf("***********创建通讯录***********\n");printf("----请输入通讯者信息-----:\n请输入非零整数,输入0则退出:\n");scanf("%d",&ch);l=(linklist *)malloc(sizeof(linklist));s=l;while(ch!=0){p=(linklist *)malloc(sizeof(linklist));printf("请输入通讯者姓名:");scanf("%s",p->name);printf("请输入通讯者电话号:");scanf("%s",p->tel);printf("请输入通讯者身份证号:");scanf("%s",p->id);s->next=p;s=p;printf("请输入通讯者信息:\n请输入非零整数,输入0则退出:\n");scanf("%d",&ch);}s->next=NULL;}//删除信息void listdelete(linklist *&l,int t ){int j=0;linklist *p,*q;p=l;while(p!=NULL&&j<t-1){j++;p=p->next;}if(p==NULL)exit(0);else{q=p->next;if(q==NULL)exit(0);p->next=q->next;printf("***************删除系统**************\n");printf("-------你将删除的联系人的信息为-------:\n");printf("通讯者姓名:%s\n",q->name);printf("通讯者电话号:%s\n",q->tel);printf("通讯者身份证号:%s\n",q->id);printf("******-------******删除成功******------*******\n");free(q);}}//输出信息void output(linklist *l){linklist *p;p=l->next;printf("----***----输出所有联系者信息----***----:\n");while(p!=NULL){printf("通讯者姓名:%s\n",p->name);printf("通讯者电话号:%s\n",p->tel);printf("通讯者身份证号:%s\n",p->id);printf("*****************************\n");p=p->next;}}//按姓名查找void findname(linklist *l){char n[N];linklist *p=l->next;printf("***************查找系统*************\n");printf("----------请输入要查找的姓名---------:\n");scanf("%s",n);while(p!=NULL){if(strcmp(p->name,n)){printf("-----***--你要查找的资料为--***----:\n");printf("通讯者姓名:%s\n",p->name);printf("通讯者电话号:%s\n",p->tel);printf("通讯者身份证号:%s\n",p->id);printf("*****************************");break;}elsep=p->next;}}//按电话号排序void sorttel(linklist *&l){linklist *p,*q,*s;q=l;p=q->next->next;q->next->next=NULL;while(p){while(q->next&&(strcmp(p->tel,q->next->tel)>0))q=q->next;s=p->next;p->next=q->next;q->next=p;p=s;q=l;}}//清空void release(linklist *&l){linklist *p,*q;p=l;q=p->next;while(q!=NULL){free(p);p=q;q=p->next;}free(p);printf("--------数据已全部被清空----------\n,*****内存回收*****\n"); }//主函数void main(){int i,t;linklist *l;while(1){printf("通讯录功能如下:\n1.建立通讯录信息\n2.删除信息\n3.输出信息\n4.按姓名查找信息\n5.按电话号排序信息\n6.清空信息\n7.退出");scanf("%d",&i);if(i<=0||i>7)break;switch(i){case 1:createlist(l);break;case 2:printf("---------请输入第t个要删除的信息---------:\n");scanf("%d",&t);listdelete(l,t);break;case 3:output(l);break;case 4:findname(l);break;case 5:sorttel(l);printf("-----***---&&&--这是按电话号排序后的信息列表--&&&---***-----\n");output(l);break;case 6:release(l);break;case 7:break;}}}运行结果:建立通讯录信息运行结果截图:输入零后通讯录信息输出结果截面图:查询通讯录信息运行结果截图:通讯录信息排序运行结果截图:删除通讯录信息运行结果截图:删除通讯录信息后的输出结果截面图:清空通讯录信息的运行结果截面图:四、实验心得与小结通过这次的上机实验,使我学到了一些回顾了以前学过的知识,使我对数据结构程序设计有了更深层次的认识和理解,懂得了灵活运用。
数据结构实验教案
数据结构实验教案实验一线性表的实验一、实验目的及要求1、掌握用ViualC++6.0调试顺序表的基本方法。
2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。
3、掌握用ViualC++6.0上机调试单链表的基本方法。
4、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现。
5、进一步掌握循环单链表的插入、删除、查找算法的实现。
二、实验学时4学时三、实验任务任务一:用顺序表实现通讯录管理1、构建通讯录的顺序表并输出检验。
2、增加插入记录的功能并输出检验。
3、增加按学号查找的功能并运行验证。
4、增加删除记录的功能并运行验证。
任务二:用链表实现通讯录管理1、构建通讯录的链表并输出检验2、增加插入记录的功能并输出检验。
3、增加按学号查找的功能并运行验证。
4、增加删除记录的功能并运行验证。
四、实验重点、难点1、在顺序表中移动元素。
2、在顺序表中找到正确的插入位置。
3、在单链表中寻找到第i-1个结点并用指针p指示。
4、比较两个单链表的节点数据大小。
五、操作内容与要求任务一:用顺序表实现通讯录管理1、构建如表1所示的顺序表并输出检验,实现表1。
2、增加插入记录的功能并输出检验,实现表2。
3、增加按学号查找的功能并运行验证。
4、增加删除记录的功能并运行验证。
1、构建通讯录的链表并输出检验,实现表1。
2、增加插入记录的功能并输出检验,实现表2。
3、增加按学号查找的功能并运行验证。
4、增加删除记录的功能并运行验证。
实验解答参考:1、要完成此功能,先要考虑数据类型,再给出构建顺序表的函数及输出的函数,然后可以写出主函数了。
参考代码如下:#include#include#include#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedeftruct{typedeftruct{ElemType某elem;//顺序表的存储空间基址,相当于一个一维的数组名intlength;//表的实际元素个数,即表的长度intlitize;//最大可存储的元素个数,表的长度的上限}SqLit;voidInitSeqLit(SqLit&L){charflag;inti,n;ElemType某p;L.elem=(ElemType某)malloc(LIST_INIT_SIZE某izeof(ElemType));L.length=0;L.litize=LIST_INIT_SIZE;printf(\是否输入初始数据?(Y/N)\canf(\if(flag=='N'||flag=='n')return;printf(\请输入初始化数据的个数:\-1-canf(\if(n>L.litize){printf(\数据太多,不足以存储!\p=L.elem;L.length=n;for(i=0;icanf(\p++;}return;}voidPrintSeqLit(SqLit&L){inti;printf(\if(L.elem[i].e某)printf(\男\女\printf(\}}intmain(){SqLitL;InitSeqLit(L);PrintSeqLit(L);return0;}intInertSeqLit(SqLit&L,inti,ElemType&e){intj;ElemType某q,某p;if(L.length+1>L.litize){printf(\表满,失败!\if(i<1||i>L.length+1){printf(\插入位置错误,失败!\ q=&(L.elem[i-1]);for(p=&(L.elem[L.length-1]);p>=q;--p){-2-trcpy((p+1)->某uehao,p->某uehao);trcpy((p+1)->name,p->name);(p+1)->e某=p->e某;trcpy(q->某uehao,e.某uehao);trcpy(q->name,);q->e某=e.e某;L.length++;return1;}主函数也要作修改如下:intmain(){inti;ElemTypee;SqLitL;InitSeqLit(L);PrintSeqLit(L);i=2;canf(\InertSeqLit(L,i,e);PrintSeqLit(L);}intLocateLit(SqLit&L,char某某){inti=0;while(iif(iif(L.elem[i].e某)printf(\男\女\-3-printf(\returni+1;}return0;}4、增加下面的函数并适当调整main函数。
线性表的应用---通讯录管理系统的设计与实现
浙江大学城市学院实验报告课程名称数据结构实验项目名称实验三线性表的应用---通讯录管理系统的设计与实现实验成绩指导老师(签名)日期一.实验目的和要求1、掌握线性结构数据问题的应用方法;2、掌握线性表的顺序存储结构及链表结构的综合应用与实现;3、了解一般信息系统的设计方式方法;二.实验内容1、设计并实现日常生活中通讯录的管理系统。
该系统需3位同学一组,按模块分工协作完成,系统具体功能基本需求描述如下:①输入数据建立通讯录表:在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。
要求此表为顺序(如列表list)存储结构。
②查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④新增通讯录信息:每次可添加一个新成员的通讯录信息。
⑤修改通讯录信息:修改通讯录中已有成员的信息。
⑥删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表(回收站)中,以便错误操作后允许恢复。
该被删成员表要求采用单链表存储。
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表(回收站)中找到该成员,重新加入到通讯录表中。
系统实现要求:①通讯录表必须使用顺序(列表list)存储结构,被删成员表(回收站)必须使用单链表存储结构。
②通讯录信息至少包括:编号、姓名、电话1、电话2、邮箱、......等,其他可自行设置。
②用菜单方式选择相应功能,且各功能的有关实现通过调用各函数来实现。
③给出系统数据类型的定义、存储结构定义以及各个函数之间的调用关系。
④实验内容中设置的功能要求必须实现,此外可自行增加合适的功能,可作为额外的实验成绩进行加分:例如:●通讯录和被删成员数据可用文件保存,程序运行时可从文件读入相应数据,程序结束时可写入文件保存。
●通讯录分组,可自行考虑把通讯录成员进行分组,如同学组、亲戚组、同事组等。
数据结构实验报告之通讯录的实现
数据结构实验报告之通讯录的实现一、实验题目利用线性表实现一个通讯录管理,通信录的数据格式如下: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 <T> * s=new Node <T> 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.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。
二、实验内容1.用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。
三、实验要求设计要求:为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
主控菜单设计要求:菜单内容程序运行后,给出9个菜单项的内容和输入提示:1.创建通讯录链表;2.将姓名为Name的好友的手机号改为MTel;3.输出通讯录;4.插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>Name的结点放到该结点后面5.将通讯录按照好友姓名进行非递减排序;6.将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个;7.统计籍贯是“大连”的好友人数;8.将通讯录中倒数第k个结点之后的所有结点移到头结点后面(保持结点间的先后顺序);9.将通讯录的正中间位置结点之后的全部结点倒置;0.退出管理系统请选择0—9:菜单设计要求:使用数字0—9来选择菜单项,其它输入则不起作用。
四、实验概要设计1)功能框图五. 使用说明1.运行环境:VC6.02.首先选择主控菜单中的操作1,即建表,然后进行其它操作.六.实验截图(见下页)七实验体会附源程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define Newsp (TxlList *)malloc(sizeof(struct TxlList))typedef struct TxlList{char Name[16]; //姓名char MTel[11]; //手机号char Tel[9]; //固定电话char EMail[16]; //邮箱地址char BornAddr[20]; //籍贯(值域:"北京"、"上海"、"大连"等等,只写城市名称)char BroadN[50]; //博客名struct TxlList *next; //指针域}TxlList, *TxlLink;void Lbuild1(TxlLink &T){//创建文件FILE *fp;TxlLink q;q=Newsp;q=T;int NUM;char filename[20];printf("\n*请输入要创建的通讯录名:\n");gets(filename);if ((fp=fopen(filename, "wb"))==NULL) { /*以写方式在当前目录打开(新建)文件*/printf("can't open file!!!\n");exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。
单位员工通讯录管理系统-线性表的应用-C语言课程设计-毕业设计
单位员工通讯录管理系统-线性表的应用-C语言课程设计-毕业设计计科111 苏中华 201100814129数据结构课程设计实验报告目录1. 单位员工通讯录管理系统(线性表的应用)*********************2. 停车场管理(栈和队列的应用)*******************************3. 哈夫曼编码/译码系统(树应用)******************************4. 教学计划编制问题(图的应用)*******************************5. 药店的药品销售统计系统(排序应用**************************6. 综合排序 (**)*******************************************7. 迷宫求解***************************************************8. 总结******************************************************* 9. 源代码*****************************************************1计科111 苏中华 201100814129一( 单位员工通讯录管理系统(线性表的应用) 1.设计题目:单位员工通讯录管理系统(线性表的应用) 2.问题描述:为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号。
其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
3.需求分析:随着社会的发展,越来越多的工厂建立。
为了便于管理单位员工和方便员工之间的交流,员工的各项信息的统计,查询和修改,删除等显得很重要。
基于上面的种种原因,在学习过数据结构课程和其他编程语言的基础上编成了一个单位员工通讯录管理系统,便于单位对员工的管理和员工间的交流。
(完整word版)数据结构实验一-通讯录
数据结构实验报告实验名称: 实验一——线性表学生姓名: 大学霸班级: xxxxxxxxxx班内序号: xx学号: xxxxxxxxxx1.日期: 2012年11月1日2.实验要求1.实验目的:2.学习指针, 模板类, 异常处理的使用;3.掌握线性表的操作实现方法;4.培养使用线性表解决实际问题的能力。
实验内容:利用线性表实现一个通讯录管理, 通信录的数据格式如下:struct DataType{int ID; //编号char name[10]; //姓名char ch; //性别char phone[13]; //电话char addr[31]; //地址};1.具体要求:2.实现通信录的建立、增加、删除、修改、查询等功能3.能够实现简单的菜单交互, 即可以根据用户输入的命令, 选择不同的操作4.能够保存每次更新的数据5.编写main()函数测试操作的正确性2.程序分析编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。
每个记录包含姓名、电话号码、住址等个人基本信息。
用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。
本程序为使用方便, 几乎不用特殊的命令, 只需按提示输入即可, 适合更多的用户使用。
对于建立通讯录管理系统, 则需了解并掌握数据结构与算法的设计方法,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
2.1 存储结构节点结构:存储结构: 带头结点和尾结点的单链表front2.2 关键算法分析本实验从整体上分为七大模块: (1)输入联系人信息;(2)添加联系人信息;(3)查找联系人信息;(4)查看联系人信息;(5)删除联系人信息;(6)修改联系人信息;(7)退出通讯录管理。
通讯录系统图2.2.1通讯录的建立伪代码:1.在堆中申请新的结点;2.新节点的数据域为a[i];3.将新节点加入到链表中;4.修改尾指针;5.全部结点插入后需要将终结结点的指针域设为空。
数据结构实验总结及源代码
实验1 线性表1 问题描述:使用线性表实现一个通讯录,通讯录内容有:学号、姓名、电话号码。
使其完成以下功能。
(1)建立一个通讯录(2)插入一个数据元素(3)删除一个元素,返回其值(4)结束程序请写出基本的算法思想,以及源程序代码。
实验2 括号匹配问题描述编写一程序判断从键盘输入的子符串括号是否匹配。
假设需判断的括号只有“(”,“)”,“[”,“]”四种。
实验4 病人看病模拟程序【问题描述】编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队的过程中,主要重复两件事:(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程。
程序采用菜单方式,其选项及功能说明如下:(1)排队――输入排队病人的病历号,加入病人排队队列中。
(2)就诊――病人排队队列中最前面的病人就诊,并将其从队列中删除;(3)查看排队――从对首到队尾列出所有的排队病人的病历号;(4)不再排队,余下一次就诊――从对首到队尾列出所有的排队病人的病历号,并退出运行;(5)下班――退出运行;线性表实验源代码#include <iostream.h>#include <conio.h>#include <iomanip.h>#include <string.h>//--------------------------------------------------------------------struct ElemType // 数据元素的类型{ int numb;char name[20];long tel;};const int MAXSIZE=100; // 数组的容量class Sqlist{ private:ElemType elem[MAXSIZE]; //结构体的数组int length;public:Sqlist( void);~Sqlist(){ };void SetData(); //建立通讯录;void Insert( int i, ElemType e); //在位置i,插入一条记录ElemType Delet(int i); //删除位置i 的记录void PrintOut(); //打印结果};//-------------------------------------------------------------//Sqlist::Sqlist( ) { length=0;}//Sqlist::Sqlist( ) { length=0;}Sqlist::Sqlist(){length=0;}void Sqlist::SetData( ) //初步建立一个通讯录{ cout<<"\n 输入人数length="; cin>>length;for(int i=0;i<length;i++){ cout<<"\n 输入学号:"; cin>>elem[i].numb;cout<<"\n 输入姓名:"; cin>> elem[i].name;cout<<"\n 输入电话号:="; cin>>elem[i].tel;}}void Sqlist::Insert( int i, ElemType e){ int j; i--;if(i<0||i>length) cout<< " i Error!"<<endl;else { for(j=length+1; j>i; j--) elem[j]=elem[j-1];// for(j=length; j>i; j--) elem[j]=elem[j-1];elem[i]=e; length++;}}ElemType Sqlist::Delet(int i){ElemType x; int j; i--;if(i<0||i>length-1){ cout<< " i Error!"<<endl; x.numb=-1;} else { x=elem[i];for(j=i; j<length-1; j++) elem[j]=elem[j+1];//for(j=i; j<length; j++) elem[j]=elem[j+1];length--;}return x;}void Sqlist::PrintOut() //输出{ cout<<"\n 通讯录总人数:"<<length;cout<<"\n PrintOut Data:\n";cout<<setw(16)<<"学号"<<setw(20)<<"姓名"<<setw(20)<<"电话号"<<endl; ;for(int k=0; k<length;k++){ cout<<setw(16)<<elem[k].numb<<setw(20)<<elem[k].name<<setw(20)<<elem[k].tel<<cou t<<endl;}}//--------------------------------------------------int main( ){ int i,k; ElemType e,x;Sqlist as;cout<<"\n 通讯录演示";do{cout<<"\n\n";cout<<"\n\n 1. 初步建立一个通讯录(线性表)";cout<<"\n\n 2. 插入一个数据元素";cout<<"\n\n 3. 删除一个元素,返回其值";cout<<"\n\n 4. 结束程序";cout<<"\n********************************";cout<<"\n 请输入你的选择(1,2,3,4)"; cin>>k;switch(k){ case 1:{ as.SetData(); as.PrintOut(); }break;case 2:{ cout<<"\n 插入的位置,i=?"; cin>>i;cout<<"\n 插入的数据编号=?"; cin>>e.numb;cout<<"\n 插入的数据姓名=?"; cin>>;cout<<"\n 插入的数据电话号=?"; cin>>e.tel;as.Insert(i,e); as.PrintOut();}break;case 3:{ cout<<"\n 删除第几个元i=?"; cin>>i;x=as.Delet(i);cout<<"\n 被删除的元素数值= "<<setw(10)<<x.numb<<setw(10)<<<<setw(10)<<x.tel;as.PrintOut();}break;default:break;} //switch}while(k>=1&&k<4);cout<<"\n 再见!"; cout<<"\n 按任意键,返回。
线性表通讯录实验
线性表通讯录实验浙江大学城市学院实验报告课程名称数据结构实验项目名称实验三线性表的应用---通讯录管理系统的设计与实现组长陈正融专业班级统计学1502 学号 31503197 得分组员1 专业班级学号得分组员2 专业班级学号得分实验成绩指导老师(签名)日期一. 实验目的和要求1、掌握线性表的顺序存储结构;2、掌握线性表的动态分配顺序存储结构及基本操作的实现;3、掌握线性表的链式存储结构;4、掌握单链表的基本操作的实现。
5、掌握线性表的应用。
二. 实验内容1、设计并实现日常生活中通讯录的管理系统。
该系统需3位同学一组,按模块分工协作完成,系统具体功能需求描述如下:①输入数据建立通讯录表:在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。
要求此表为顺序存储结构。
②查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④新增通讯录信息:每次可添加一个新成员的通讯】、录信息。
⑤修改通讯录信息:修改通讯录中已有成员的信息。
⑥删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表中,以便错误操作后允许恢复。
该被删成员表要求采用链式存储。
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表中找到该成员,重新加入到通讯录表中。
系统实现要求:①通讯录表必须使用动态分配顺序存储结构,被删成员表必须使用链式存储结构。
②通讯录信息至少包括:编号、姓名、电话1、电话2、邮箱等,其他可自行设置。
③用菜单方式选择相应功能,且各功能的有关操作需通过调用各函数来实现,如:初始化通讯录表用函数void InitAddressBook(SqList &TXL)、浏览所有通讯录成员函数BrowseAddressBook(SqList TSL) 等等,将这些子函数放在头文件test3_Seq.h中。
数据结构实验一 线性表的应用(班级通讯录代码及测试界面)
printf("\t**********************欢迎使用班级通讯录**********************\n\n"); printf("\t\t\t╔━━━━━═操作目录═━━━━━╗\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ ◇1.显示通讯录记录 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ ◇2.添加通讯录成员 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ ◇3.删除通讯录成员 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ ◇4.查找通讯录成员 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ ◇5.插入通讯录记录 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t┃ ◇6.退出班级通讯录 ┃\n"); printf("\t\t\t┃ ┃\n"); printf("\t\t\t╚━━━━━━━━━━━━━━━━╝\n"); printf("\n\t**************************************************************\n"); printf("\n\n\t\t\t 请选择操作:"); scanf("%d",&set); printf("\n"); return set; } void key () { //任意键函数 printf("\n\t\t\t\t[按任意键返回主界面]\n\n"); getchar(); getchar(); }
数据结构课程设计-简易手机通讯录管理系统
一、课题名称简易手机通讯录管理系统(线性表、查找、排序)二、主要内容简易手机通讯录管理系统的设计主要是实现对手机通讯录的管理和相关操作。
基本功能如下:(1)联系人信息录入、添加功能:包括手机号(此处用短号,5位,不能重复)、姓名、家庭住址的录入和添加。
(2)联系人信息查询功能:能①按手机号进行查询。
②按联系人姓名进行查询。
(3)排序:①能按手机号升序进行排序;②能按姓名进行升序排序,姓名相同时按手机号从小到大进行排序(4)联系人信息的修改、删除功能:①按手机号进行联系人信息的修改和删除。
②按姓名进行联系人信息的修改和删除,多个姓名时,再指定具体的号码。
(5)统计功能:统计自己的联系人有多少个。
三、课题设计的基本思想,原理和算法描述(1)本次课程设计题目为简易手机通讯录管理系统,主要运用到线性表中顺序表的相关知识,以及顺序查找的思想和冒泡排序算法。
(2)界面设计//菜单函数int menu(){int c;printf("\n\n\t☆☆☆☆☆☆☆手机通讯录信息管理系统☆☆☆☆☆☆☆☆\n\n");printf("******************************************************************* ***\n");printf(" 1.添加联系人信息\n");printf(" 2.查询联系人信息\n");printf(" 3.对联系人信息进行排序\n");printf(" 4.修改联系人信息\n");printf(" 5.删除联系人信息\n");printf(" 6.统计联系人个数\n");printf(" 0.退出信息管理系统\n");printf("******************************************************************* ***\n\n");printf("★请输入您的选择(0-6):");while(1){scanf("%d",&c);if(c<0||c>6)printf("\n▲输入错误!请重新选择:");elsebreak;}return c;}//主函数void main(){SqList * L;InitList(L);system("color 3f");while(1){switch(menu()){case 1:system("cls");printf("\n\t\t\t信息的增加\n");ListAdd(L);break;case 2:system("cls");printf("\n\t\t\t信息的查询\n");Search(L);break;case 3:system("cls");printf("\n\t\t\t对信息进行排序\n");Paixu(L);break;case 4:system("cls");printf("\n\t\t\t信息的修改\n");ListModify(L);break;case 5:system("cls");printf("\n\t\t\t信息的删除\n");Delete(L);break;case 6:system("cls");printf("\n\t\t\t统计联系人个数\n");ListLength(L);break;case 0:printf("再见!\n");return;default:printf("\n▲输入错误!请重新选择:");break;}}}(3)功能模块的实现初始化顺序表void InitList(SqList *&L)L=(SqList *)malloc(sizeof(SqList));L->length=0;}增加信息函数。
实验一线性表操作实验报告
实验一_线性表操作_实验报告实验一:线性表操作一、实验目的1.理解线性表的基本概念和特点。
2.掌握线性表的基本操作,包括插入、删除、查找等。
3.通过实验,提高动手能力和解决问题的能力。
二、实验原理线性表是一种较为常见的数据结构,它包含零个或多个数据元素,相邻元素之间有前后关系。
线性表具有以下特点:1.元素之间一对一的顺序关系。
2.除第一个元素外,每个元素都有一个直接前驱。
3.除最后一个元素外,每个元素都有一个直接后继。
常见的线性表有数组、链表等。
本实验主要针对链表进行操作。
三、实验步骤1.创建链表:首先创建一个链表,并给链表添加若干个节点。
节点包括数据域和指针域,数据域存储数据,指针域指向下一个节点。
2.插入节点:在链表中插入一个新的节点,可以选择在链表的头部、尾部或中间插入。
3.删除节点:删除链表中的一个指定节点。
4.查找节点:在链表中查找一个指定数据的节点,并返回该节点的位置。
5.遍历链表:从头节点开始,依次访问每个节点的数据。
四、实验结果与分析1.创建链表结果:我们成功地创建了一个链表,每个节点都有数据域和指针域,数据域存储数据,指针域指向下一个节点。
2.插入节点结果:我们成功地在链表的头部、尾部和中间插入了新的节点。
插入操作的时间复杂度为O(1),因为我们只需要修改指针域即可。
3.删除节点结果:我们成功地删除了链表中的一个指定节点。
删除操作的时间复杂度为O(n),因为我们可能需要遍历整个链表才能找到要删除的节点。
4.查找节点结果:我们成功地在链表中查找了一个指定数据的节点,并返回了该节点的位置。
查找操作的时间复杂度为O(n),因为我们可能需要遍历整个链表才能找到要查找的节点。
5.遍历链表结果:我们成功地遍历了整个链表,并访问了每个节点的数据。
遍历操作的时间复杂度为O(n),因为我们可能需要遍历整个链表。
通过本次实验,我们更加深入地理解了线性表的基本概念和特点,掌握了线性表的基本操作,包括插入、删除、查找等。
数据结构线性表实验报告五篇
数据结构线性表实验报告五篇第一篇:数据结构线性表实验报告实验报告课程名:数据结构实验名:线性表及其操作姓名:班级:学号:撰写时间:2014.09.24一实验目的与要求1.掌握线性表的实现2.掌握线性表的基本操作的实现二实验内容• 分别完成线性表的顺序表示及链式表示• 在两种表示上, 分别实现一些线性表的操作, 至少应该包括–在第i个位置插入一个元素–删除第i个元素–返回线性表长–返回第i个元素的值三实验结果与分析#include #include //---------线性表链式表示-----------struct V//声明一个结构体类型struct V { int value;struct V * next;//定义结构体变量};void PrintLink(struct V*p)//定义一个结构体指针{ while(p!=NULL)//只要指针指向的变量不为NULL;就会一直循环链表指向下一个结构体{printf(“%d, ”,(*p).value);p=(*p).next;//指针指向下一个结构体} printf(“n”);} void Link(){struct V*head;head=(struct V*)malloc(sizeof(struct V));//开辟一个长度为size的内存(*head).value=-100;//表头为-100(*head).next=NULL;printf(“------------线性表链式表示------------n”);int i,n=10;struct V*p=head;printf(“10个数据:n”);for(i=0;i(*p).next=(struct V*)malloc(sizeof(struct V));p=(*p).next;(*p).value=2*i;(*p).next=NULL;} PrintLink(head);//调用PrintLink函数printf(“删除第四个数据:n”);int k=4;p=head;for(i=1;ip=(*p).next;} struct V*temp=(*p).next;//k表示插入和删除的位置(*p).next=(*temp).next;free(temp);PrintLink(head);printf(“插入第十个数据:n”);k=10;p=head;for(i=1;ip=(*p).next;} temp=(*p).next;(*p).next=(struct V*)malloc(sizeof(struct V));(*(*p).next).value=-99;(*(*p).next).next=temp;PrintLink(head);}//---------线性表顺序表示-----------void seq1(){ int i,n=10,k=4;int a[10];//---------输出数组元素------------printf(“-------------线性表顺序表示---------n”);for(i=0;ia[i]=i;} printf(“数组元素为:n”);for(i=0;iprintf(“%3d”,a[i]);} printf(“n”);//--------插入一个数组元素---------int m=n+1,j=12;//插入元素12 int b[20];for(i=0;i if(i{b[i]=a[i];}else if(i==k){b[i]=j;}else{b[i]=a[i-1];} } printf(“输出插入一个元素的数组:n”);for(i=0;i{if(i{c[i]=a[i];}else{c[i]=a[i+1];} } printf(“输出删除一个元素的数组:n”);for(i=0;i printf(“数组元素为:n”);for(i=1;i<=a[0];i++){a[i]=i;} for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);//-----在k 位置插入一个元素------------for(i=a[0];i>=k;i--){a[i+1]=a[i];} a[k]=-100;++a[0];for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);//-------在k---------------for(i=0;i>k;i++){a[i]=a[i+1];} a[k]=-1;a[0]=n;--a[0];for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);} int main(int argc,char *argv[]){ seq1();seq2();Link();return 0;} 图1:实验结果截图实验分析:已在程序中按规定格式标注。
数据结构实训通讯录报告
一、实训目的本次数据结构实训通讯录报告旨在通过实际操作,加深对数据结构理论知识的理解,提高编程能力,培养实际解决问题的能力。
通过设计、实现和维护一个通讯录管理系统,使学生掌握线性表、链表、树、图等基本数据结构的应用,同时熟悉数据库操作和前端界面设计。
二、实训环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 数据库:MySQL5. 前端界面设计:Qt三、实训内容1. 系统需求分析(1)功能需求① 添加:允许用户添加新的联系人信息,包括姓名、电话、邮箱、地址等。
② 查询:根据姓名、电话、邮箱等关键字进行模糊查询。
③ 修改:允许用户修改指定联系人的信息。
④ 删除:允许用户删除指定联系人信息。
⑤ 导出:将通讯录数据导出为Excel格式。
⑥ 导入:允许用户从Excel文件导入联系人信息。
(2)性能需求① 系统应具备良好的响应速度,用户操作时,系统应迅速给出反馈。
② 系统应具备较高的稳定性,避免因操作失误导致数据丢失。
2. 系统设计① 联系人信息采用结构体存储,包括姓名、电话、邮箱、地址等字段。
② 联系人信息存储在MySQL数据库中,使用线性表进行管理。
③ 查询操作采用二分查找算法,提高查询效率。
(2)功能模块设计① 添加模块:用户输入联系人信息,系统将其存储在数据库中。
② 查询模块:用户输入关键字,系统从数据库中查找匹配的联系人信息。
③ 修改模块:用户输入联系人信息,系统将其更新到数据库中。
④ 删除模块:用户输入联系人信息,系统将其从数据库中删除。
⑤ 导出模块:将数据库中的联系人信息导出为Excel格式。
⑥ 导入模块:用户上传Excel文件,系统将其中的联系人信息导入数据库中。
3. 系统实现(1)数据库设计① 创建联系人信息表(contact_info),包括姓名、电话、邮箱、地址等字段。
② 设计SQL语句,实现数据的增删改查操作。
(2)编程实现① 使用C++实现各个功能模块,包括添加、查询、修改、删除等。
数据结构实验题目
数据结构实验题⽬实验⼀线性表1 实验⽬的通过选择下⾯四个题⽬之⼀进⾏实现,掌握如下内容:熟悉C++语⾔的基本编程⽅法,掌握集成编译环境的调试⽅法学习指针、模板类、异常处理的使⽤掌握线性表的操作的实现⽅法学习使⽤线性表解决实际问题的能⼒2 实验内容2.1题⽬1根据线性表的抽象数据类型的定义,选择下⾯任⼀种链式结构实现线性表,并完成线性表的基本功能。
线性表存储结构(五选⼀):1、带头结点的单链表2、不带头结点的单链表3、循环链表4、双链表5、静态链表线性表的基本功能:1、构造:使⽤头插法、尾插法两种⽅法2、插⼊:要求建⽴的链表按照关键字从⼩到⼤有序3、删除4、查找5、获取链表长度6、销毁7、其他:可⾃⾏定义编写测试main()函数测试线性表的正确性。
2.2题⽬2利⽤线性表实现⼀个通讯录管理,通信录的数据格式如下:struct DataType{int ID; //编号char name[10]; //姓名char ch; //性别char phone[13]; //电话char addr[31]; //地址};要求:实现通讯录的建⽴、增加、删除、修改、查询等功能能够实现简单的菜单交互,即可以根据⽤户输⼊的命令,选择不同的操作。
能够保存每次更新的数据(选作)能够进⾏通讯录分类,⽐如班级类、好友类、⿊名单等等(选作)编写测试main()函数测试线性表的正确性2.3题⽬3利⽤线性表实现⼀个⼀元多项式Polynomialf(x) = a+ a1x + a2x2 + a3x3+ … + a n x n提⽰:Polynomial的结点结构如下:struct term{float coef; //系数int expn; //指数};可以使⽤链表实现,也可以使⽤顺序表实现。
要求:能够实现⼀元多项式的输⼊和输出能够进⾏⼀元多项式相加能够进⾏⼀元多项式相减能够计算⼀元多项式在x处的值能够计算⼀元多项式的导数(选作)能够进⾏⼀元多项式相乘(选作)编写测试main()函数测试线性表的正确性2.4题⽬4利⽤循环链表实现约瑟夫问题的求解。
线性表通讯录
#include<stdlib.h>#include<string.h>#include<conio.h>#include<stdio.h>#include<dos.h>struct friend{int num;char name[9];char sex;char phone[11];}friends[10];FILE *fp;int i;void Data_Load(){int j;long k;fp=fopen("data.txt","r+t");if(fp!=NULL){for(i=1;i<10;i++){j=fgetc(fp);if(j==EOF)return;k=i-1;fseek(fp,k*sizeof(struct friend),SEEK_SET);fread(&friends[i],sizeof(struct friend),1,fp);}}else{fp=fopen("data.txt","w");i=1;}}void Data_Show(int j){printf("\n\n\t编号:%d",friends[j].num);printf("\n\n\t姓名:%s",friends[j].name);printf("\n\n\t性别:%c",friends[j].sex);printf("\n\n\t电话:%s\n\n",friends[j].phone);}void Data_Input(int j){fflush(stdin);friends[j].num=j;printf("\n\n\t编号:%d",j);printf("\n\n\t姓名:");scanf("%s",&friends[j].name);fflush(stdin);printf("\n\t性别(f/m):");scanf("%c",&friends[j].sex);printf("\n\t电话:");scanf("%s",&friends[j].phone);}void Data_Save(){int j;fp=fopen("data.txt","w");for(j=1;j<=i;j++){fwrite(&friends[j],sizeof(struct friend),1,fp);}}void main(){int j,k;int nv=0,nan=0;char *cha[10];char ch;Data_Load();i--;do{printf("\n\t*****欢迎使用通讯录系统*****"); start:printf("\n\n\n\t****************************");printf("\n\t*******----1.读取----*******");printf("\n\t*******----2.增加----*******");printf("\n\t*******----3.删除----*******");printf("\n\t*******----4.搜索----*******");printf("\n\t*******----5.修改----*******");printf("\n\t*****----6.男女人数----*****");printf("\n\t*****----7.保存退出----*****");printf("\n\t****************************");printf("\n\n");printf("\t请输入操作:");ch=getche();switch(ch){case '1':j=1;while(j<=i)Data_Show(j++);if(j>i)printf("\n\n\t表尾\n");break;case '2':while(getch()!=0x1b&&i<10){i++;Data_Input(i);break;}if(i==10)printf("\n\t通讯录已满\n");break;case '3':if(i<1){printf("\n\n\t没有数据\n");break;}printf("\n\n\t删除序号:");scanf("%d",&k);for(j=k;j<i;j++){strcpy(friends[j].name,friends[j+1].name);friends[j].sex=friends[j+1].sex;strcpy(friends[j].phone,friends[j+1].phone);}i--;break;case '4':printf("\n\n\t请输入要查找的姓名:");gets(cha);for(j=1;j<=i;j++){if(strcmp(cha,friends[j].name)==0){Data_Show(j);break;}}if(j>1)printf("\n\t没有此人数据\n\n");break;case '5':printf("\n\n\t修改位置:");scanf("%d",&k);if(k<=j){for(j=i+1;j<k;j++){。
语文
通讯录管理程序设计一、问题的描述1、摘要:本次通讯录管理程序主要是运用了链表的应用,线性表是数据结构中最简单、最常用的一种线性结构,本次实验主要任务是使用有关单链表的操作来实现通讯录信息系统管理。
2 、课程设计思路做通讯录最主要的就是实用性,要简单,便于操作。
程序的界面要方便与用户之间的交互。
本次实验包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯者的输出等。
现假设链表结点仅含一个数据域和一个指针域。
定义通讯者的结点类型:typedef struct{char num[5]; //编号char name[9]; //姓名char sex[3]; //性别char phone[13]; //电话char addr[31]; //地址}DataType;所以,线形表的链式存储结构定义为:typedef struct node{ //结点类型定义DataType data; //结点数据域struct node *next; //结点指针域}ListNode;typedef ListNode * LinkList;LinkList head; //定义指向单链表的头指针ListNode *p; //定义一个指向结点的指针变量在这里就用到了指针变量和指针指向的变量(结点变量)。
二、算法分析1、建立通讯录链表的设计采用尾插法建立链表,算法描述如下:(1)使链表的头尾指针head、real指向新生成的头结点(也是尾结点);(2)置结束标志为0(假);(3)while(结束标志不为真){P指向新生成的结点;读入一个通讯者数据至新结点的数据域;将新结点链到尾结点之后;使尾指针指向新结点;提示:是否结束建表,读入一个结束标志;}(4)尾结点指针域置空值NULL.2、通信者信息的插入使用两个指针变量p1和p2分别指向当前刚访问过的结点和下一个待访问的结点,循环顺序查找链表,寻找插入结点的位置,其中p1指向待插入位置的前一个结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江大学城市学院实验报告课程名称数据结构实验项目名称实验三线性表的应用---通讯录管理系统的设计与实现组长陈正融专业班级统计学1502 学号31503197 得分组员1专业班级学号得分组员2专业班级学号得分实验成绩指导老师(签名)日期一.实验目的和要求1、掌握线性表的顺序存储结构;2、掌握线性表的动态分配顺序存储结构及基本操作的实现;3、掌握线性表的链式存储结构;4、掌握单链表的基本操作的实现。
5、掌握线性表的应用。
二.实验内容1、设计并实现日常生活中通讯录的管理系统。
该系统需3位同学一组,按模块分工协作完成,系统具体功能需求描述如下:①输入数据建立通讯录表:在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。
要求此表为顺序存储结构。
②查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④新增通讯录信息:每次可添加一个新成员的通讯】、录信息。
⑤修改通讯录信息:修改通讯录中已有成员的信息。
⑥删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表中,以便错误操作后允许恢复。
该被删成员表要求采用链式存储。
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表中找到该成员,重新加入到通讯录表中。
系统实现要求:①通讯录表必须使用动态分配顺序存储结构,被删成员表必须使用链式存储结构。
②通讯录信息至少包括:编号、姓名、电话1、电话2、邮箱等,其他可自行设置。
③用菜单方式选择相应功能,且各功能的有关操作需通过调用各函数来实现,如:初始化通讯录表用函数void InitAddressBook(SqList &TXL)、浏览所有通讯录成员函数BrowseAddressBook(SqList TSL) 等等,将这些子函数放在头文件test3_Seq.h中。
③建立主函数文件test3.cpp,通过调用上述头文件中的函数来实现该系统。
④给出系统数据类型的定义、存储结构定义以及各个函数之间的调用关系。
⑤实验内容中设置的功能要求必须实现,此外可自行增加合适的功能,可作为额外的实验成绩进行加分:例如:●通讯录和被删成员数据可用文件保存,程序运行时可从文件读入相应数据,程序结束时可写入文件保存。
●通讯录分组,可自行考虑把通讯录成员进行分组,如同学组、亲戚组、同事组等。
2、以小组为单位认真填写实验报告,实验报告必须包括各类数据类型的结构定义说明,各类数据的组织方式,系统的功能结构,各个操作的定义以及实现方法,运行结果与分析,难点如何解决,存在问题以及可改进之处等。
同时,在实验报告中需写明小组每位同学的分工,得分(小组总分不超过12分)等。
实验报告文件取名为report3.doc。
每组还必须制作一个答辩PPT,该PPT的命名为PPT_通讯录管理系统_(各小组成员名字).PPT。
3、每位组长上传实验报告文件report3.doc 、源程序文件test3.cpp及test3_Seq.h、test3_Link.h,以及答辩PPT压缩打包后到BB平台上。
小组分工:陈正融程序设计1、抽象数据类型ADT Sqlist{ 数据对象:D={ai |aiElemSet,i=1,2,3,……,n,n≥0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3,……,n}基本操作:(1)int newContactPerson(Sqlist &S)//输入函数(2)int SearchContacts(Sqlist &S, Linklist L)//查询函数(3)int Oper_updata(Sqlist &S, Linklist L)//修改函数(4)int Oper_detele(Sqlist &S, Linklist L)//删除函数(5)int InitList_Sq(Sqlist &S)//初始化函数(6)int sort_Sq(Sqlist &S, Contacts i)//排序函数(7)int DestoryList_Sq(Sqlist &S)//销毁函数ADT Linklist{ 数据对象:D={ai |aiElemSet,i=1,2,3,……,n,n≥0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3,……,n}基本操作:(1)int insert_L(Linklist L, Contacts i, Sqlist &S)//输入函数(2)int InitList_L(Linklist &L)//初始化函数(3)int Browselist(Linklist L)//显示函数(4)int removeContact(Linklist L, Sqlist &S)//恢复函数(5)int DestoryList_L(Linklist &L)//销毁函数2、存储结构typedef struct{int no; //编号char name[20]; //信息char tel_1[20]; //电话1char tel_2[20]; //电话2char Email[50]; //邮箱char group[20]; //分组信息}Contacts;typedef struct{Contacts *elem;int length;int listsize;}Sqlist;typedef struct Node{Contacts data;struct Node *next;}LNode, *Linklist;typedef struct{int num; //分组序号char groname[20]; //分组名}grouping;typedef struct{grouping *gr;int length;int listsize;}grolist;3、函数定义void main_menu() //菜单int InitList_Sq(Sqlist &S) //顺序表初始化int InitList_gro(grolist &G)//分组表初始化int DestoryList_Sq(Sqlist &S)//通途录销毁int DestoryList_Gro(grolist &G)//分组表销毁int in_Seq(Sqlist &S, Contacts a, int i) //本地输入处理int zero_Sq(Sqlist &S) //通讯录本地输入int zero_Gro(grolist &G) //分组表本地输入int out_Seq(Sqlist &S, Contacts a, int i) //通讯录输出处理int printtotxt_Sq(Sqlist &S) //通讯录输出int printtotxt_Gro(grolist &G) //分组表输出Contacts handle(Sqlist &S, Contacts i) //新建信息处理int sort_Sq(Sqlist &S, Contacts i) //排序int newContactPerson(Sqlist &S) ///新建联系人int newGro(grolist &G) //新建分组int Contactdetails(Sqlist &S, int no) //显示联系人详情int Delete_Sq(Sqlist &S, Linklist L, int i, int j) //删除联系人int Delete_Gro(grolist &G, Sqlist &S) //删除分组int updata_Sq(Sqlist &S, Linklist L, int no) //修改联系人int BrowseContacts(Sqlist &S) //显示联系人int BrowseGro(grolist &G) //显示分组int Operation_2(Sqlist &S, Linklist L, int no) //查询后操作int find_out(Sqlist &S, int i, int j) //查询输出处理int findContact(Sqlist &S, int no[], char na[]) //查询输出int BrowseGroCon(Sqlist &S, char na[], int k[20]) //显示分组联系人int SearchContacts(Sqlist &S, Linklist L) //查询联系人int joingro(grolist &G, Sqlist &S, int i, int j) //分组加入联系人int Oper_updata(Sqlist &S, Linklist L) //修改联系人int Oper_detele(Sqlist &S, Linklist L) //删除联系人int Operation_Gro2(Sqlist &S, grolist &G) //分组综合操作int updataGroname(grolist &G, Sqlist &S) //修改分组名int Operation_Gro(grolist &G, Sqlist &S) //分组操作int Destory(Sqlist &S, Linklist L, grolist &G) //销毁int InitList_L(Linklist &L) //初始化链表int DestoryList_L(Linklist &L) //销毁链表int Browselist(Linklist L) //显示误删表联系人int in_link(Linklist p) //本地输入修改int zero_Link(Linklist L) //本地输入int out_Link(Linklist p) //本地输出修改int printotxt_link(Linklist L) //本地输出int insert_L(Linklist L, Contacts i, Sqlist &S) //插入联系人int sort_Link(Sqlist &S, Contacts i) //恢复联系人排序int removeContact(Linklist L, Sqlist &S) //恢复联系人4、程序描述本通讯录所有的操作都是基于联系人的编号,未避免编号出错,采用自动编号。