文档库 最新最全的文档下载
当前位置:文档库 › 数据结构--员工管理信息系统代码

数据结构--员工管理信息系统代码

数据结构--员工管理信息系统代码
数据结构--员工管理信息系统代码

数据结构-员工管理信息系统源程序

#include

#include

#include

#include

using namespace std;

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。

#define MAXSIZE 100 //顺序表可能达到的最大长度

typedef struct { //ElemType 为自定义的数据类型,要根据实际情况定义,本例为学生信息:(学号,成绩)

int num;

string name;

string sex;

string birth;

string edu;

string job;

string phone;

string add;

}ElemType;

typedef struct { //定义顺序表类型为List ElemType *elem;

int length;

}List;

void InitList(List &L) //创建空顺序表

{

L.elem=new ElemType[MAXSIZE]; //动态分配空间

L.length=0;

}

void ListInput(List &L,int n) //输入顺序表数据

{

int i;

cout<<"请输入员工信息"<

for(i=0;i

{cout<<"请输入员工编号:"<

cin>>L.elem[i].num; //输入员工编号

cout<<"请输入员工姓名"<

cin>>L.elem[i].name; //输入姓名

cout<<"请输入员工性别:"<

cin>>L.elem[i].sex; //输入员工编号

cout<<"请输入员工出生年月"<

cin>>L.elem[i].birth;

cout<<"请输入员工职务"<

cin>>L.elem[i].job;

cout<<"请输入员工学历"<

cin>>L.elem[i].edu;

cout<<"请输入员工电话号码"<

cin>>L.elem[i].phone;

cout<<"请输入员工住址"<

cin>>L.elem[i].add;

}

L.length=n;

}

void ListOutput(List L) //输出顺序表数据

{

int i=0;

if (L.length==0) cout<<"空表,无数据输出!";

for(i=0;i

cout<<"("<

L.elem[i].add<<")"<

cout<

}

int LocateElem(List L,int num) //在顺序表里查找某编号员工的信息

{

int i;

for(i=0;i

if(num==L.elem[i].num)

return i+1;

else return 0;

}

void ListInsert(List &L,ElemType e) //顺序表的插入

{

int i;

if(L.length==MAXSIZE) cout<<"存储空间已满"; //当前存储空间已满if(LocateElem(L,e.num)!=0)

cout<<"数据已存在,请重新输入";

else

{ for(i=L.length-1;i>=0;i--)

if (e.num

L.elem[i+1]=L.elem[i]; //在查找位置的同时元素后移 else

break;

L.elem[i+1]=e; //将新元素e放入合适的位置

++L.length; //表长增1

}

}

void ListDelete(List &L,int bh) // 顺序表的删除

{

int i,j;

i=LocateElem(L,bh); //查找删除位置

if(i==0)

cout<<"找不到此员工相关信息";

else

{for(j=i;j<=L.length;j++)

L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移--L.length; } //表长减1

}

void BubbleSort(List &L)

{

int i,j;

ElemType key;

for(i=0;i

for(j=i+1;j

if(L.elem[i].num>L.elem[j].num)

{ key=L.elem[i];

L.elem[j]=key;

}

}

void ChangeM(List &L)

{

int i,n,num;

cout<<"\t\t\t* 请输入更改的员工编号 *"<>num;

cout<<"\t\t\t************************"<

cout<<"\t\t\t* *"<

cout<<"\t\t\t* [1] 改名字 *"<

cout<<"\t\t\t* [2] 改电话 *"<

cout<<"\t\t\t* [3] 改性别 *"<

cout<<"\t\t\t* [4] 改学历 *"<

cout<<"\t\t\t* [5] 改住址 *"<

cout<<"\t\t\t* [6] 改编号 *"<

cout<<"\t\t\t* [7] 改工作 *"<

cout<<"\t\t\t* [8] 改生日 *"<

cout<<"\t\t\t************************\n";

cout<<"\t\t\t* 请输入1-8选择修改项 *"<

cin>>n;

for(i=0;i

if(num==L.elem[i].num) //查找删除位置break;

if(i

switch(n)

{

case 1:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].name;break;

case 2:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].phone;break;

case 3:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].sex;break;

case 4:

cout<<"\t\t\t 请输入新内容:"<

case 5:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].add;break;

case 6:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].num;break;

case 7:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].job;break;

case 8:

cout<<"\t\t\t 请输入新内容:"<

cin>>L.elem[i].birth;break;

}

else

cout<<"未找到要修改的员工信息,请检查是否编号输入有误!\n"; }

void menu(void) //主菜单

{

system("cls");

cout<<"\n\n";

cout<<"\t\t\t 员工管理系统\n";

cout<<"\t\t\t************************\n";

cout<<"\t\t\t* *\n";

cout<<"\t\t\t* [1] 数据输入 *\n";

cout<<"\t\t\t* [2] 查询数据 *\n";

cout<<"\t\t\t* [3] 更新数据 *\n";

cout<<"\t\t\t* [4] 插入数据 *\n";

cout<<"\t\t\t* [5] 删除数据 *\n";

cout<<"\t\t\t* [6] 员工排序 *\n";

cout<<"\t\t\t* [7]txt文件(员工信息) *\n";

cout<<"\t\t\t* [8] 文件导出 *\n";

cout<<"\t\t\t* [9] 退出 *\n";

cout<<"\t\t\t* *\n";

cout<<"\t\t\t* *\n";

cout<<"\t\t\t************************\n";

cout<<"\t\t\t 请输入你的选项(1-8):";

}

void newFile(List &L){

int i;

int num;

string name;

string sex;

string birth;

string edu;

string job;

string phone;

string add;

FILE *fp;

if((fp=fopen("f1.txt","w"))==NULL)

{

cout<<"file open error!\n";

exit(0);

}

for(i=0;i

{

num=L.elem[i].num;

name=L.elem[i].name;

sex=L.elem[i].sex;

birth=L.elem[i].birth;

edu=L.elem[i].edu;

job=L.elem[i].job;

phone=L.elem[i].phone;

add=L.elem[i].add;

fprintf(fp,"%d",num);

fputs(" ",fp);

fputs((const char *)(name.c_str()),fp);

fputs(" ",fp);

fputs((const char *)(sex.c_str()),fp);

fputs(" ",fp);

fputs((const char *)(birth.c_str()),fp);

fputs(" ",fp);

fputs((const char *)(edu.c_str()),fp); fputs(" ",fp);

fputs((const char *)(job.c_str()),fp);

fputs(" ",fp);

fputs((const char *)(phone.c_str()),fp);

fputs(" ",fp);

fputs((const char *)(add.c_str()),fp);

fputs(" ",fp);

fputs("\n",fp);

}

fclose(fp);

}

void readFile(List &L)

{

FILE *fp;

if((fp=fopen("f1.txt","r"))==NULL)

{

cout<<"file open error!\n";

exit(0);

}

while(!feof(fp))

{

char a;

a=fgetc(fp);

putchar(a);

}

}

void main()

{

List L;

int i,n,m;

char name;

ElemType e;

InitList(L);

while(1)

{

menu();

cin>>i;

switch(i)

{

case 1:

cout<<"请输入员工总人数:";

cin>>n;

ListInput(L,n);

ListOutput(L);

break;

case 2:

cout<<"请输入要查找的员工编号:";

cin>>n;

m=LocateElem(L,n);

if (m==0)

cout<<"数据不存在";

else

{ cout<<"该员工的信息为:";

cout<

break;

case 3:

ChangeM(L);

ListOutput(L);

break;

case 4:

cout<<"请输入要插入的数据,"<

cout<<"按以下顺序输入信息:编号、姓名、性别、出生年月、职务、学历、电话号码、地址。"<

cin>>e.num;

cin>>https://www.wendangku.net/doc/ee17293330.html,;

cin>>e.sex;

cin>>e.birth;

cin>>e.job;

cin>>https://www.wendangku.net/doc/ee17293330.html,;

cin>>e.phone;

cin>>e.add;

ListInsert(L,e);

ListOutput(L);

break;

case 5:

cout<<"请输入要删除学号的员工编号:";

cin>>n;

ListDelete(L,n);

ListOutput(L);

break;

case 6:

BubbleSort(L);

cout<<"按编号排序后。。"<

ListOutput(L);break;

case 7:

newFile(L);

cout<<"已存入TXT文件。"<

case 8:

readFile(L);

int ar;

cin>>ar;

break;

case 9:

exit(0);break;

default: cout<<"输入错误,请输入(1-8):\n";break; }

cout<<"Enterto continue..."<

getchar();

getchar();

}

}

C语言数据结构串的基本操作

实验九串的基本操作 #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars 的长度i if(!i) { // chars的长度为0 (*T).ch = NULL; (*T).length = 0; } else { // chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char)); // 分配串空间 if(!(*T).ch) // 分配串空间失败 exit(0); for(j = 0; j < i; j++) // 拷贝串 (*T).ch[j] = chars[j]; (*T).length = i; } return 1; } // 由串S复制得串T int StrCopy(HString *T,HString S) { int i; if((*T).ch) free((*T).ch); // 释放T原有空间 (*T).ch=(char*)malloc(S.lengt h*sizeof(char)); // 分配串空间if(!(*T).ch) // 分配串空间失 败 exit(0); for(i=0;i

数据结构课程设计图的遍历和生成树求解

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法课程设计 课程代码: 6014389 题目: 图的遍历和生成树求解实现 年级/专业/班: 学生姓名: 学号: 开始时间: 2012 年 12 月 09 日 完成时间: 2012 年 12 月 26 日 课程设计成绩: 指导教师签名:年月日

目录 摘要 (3) 引言 (4) 1 需求分析 (5) 1.1任务与分析 (5) 1.2测试数据 (5) 2 概要设计 (5) 2.1 ADT描述 (5) 2.2程序模块结构 (7) 软件结构设计: (7) 2.3各功能模块 (7) 3 详细设计 (8) 3.1结构体定义 (19) 3.2 初始化 (22) 3.3 插入操作(四号黑体) (22) 4 调试分析 (22) 5 用户使用说明 (23) 6 测试结果 (24) 结论 (26)

摘要 《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的: ?了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ?初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; ?提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 这次课程设计我们主要是应用以前学习的数据结构与面向对象程序设计知识,结合起来才完成了这个程序。 因为图是一种较线形表和树更为复杂的数据结构。在线形表中,数据元素之间仅有线性关系,每个元素只有一个直接前驱和一个直接后继,并且在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。因此,本程序是采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储。采用邻接矩阵即为数组表示法,邻接表和十字链表都是图的一种链式存储结构。对图的遍历分别采用了广度优先遍历和深度优先遍历。 关键词:计算机;图;算法。

数据结构实验一通讯录

数据结构实验报告 实验名称:实验一——线性表 学生姓名:大学霸 班级: 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语言编写的程序,它用起来很方便又很灵活。它由输入职工信息,输出职工信息,按职工号,部门号,工资排序,按职工号,部门号,工资来输出职工的所有信息。删除有关职工的所有信息,保存职工的所有信息并退出等11个模块儿组成。 二、实验环境:C语言、C++、C# 等等。 三、功能说明: 下面按步骤来介绍一下,职工信息管理系统的基本操作。 这是运行程序以后出现的主界面。如图(1)所示: 图(1)主界面 1.输入职工的信息 该模块儿的功能是分别输入职工的姓名,职工号,部门号,工资等信息。每次输入职工的所有信息以后,界面上会显示出《输入完成!》的命令。如图(2)所示:

图(2)输入职工信息 2.输出所有的职工信息 该模块儿的功能是显示出有关职工的所有信息。操作如图(3)所示: 图(3)输出所有的职工信息 3.按职工号排序 该模块儿的功能是按职工号排序所有的职工。我们按3的时候,界面上会显示出《排序完成!》的命令。如图(4)所示:

图(4)按职工号排序 4.输出所有的职工号码 该模块儿的功能是显示出已排序好的所有职工的号码。操作如图(5)所示: 图(5)输出所有的职工号 5.按部门号排序 该模块儿的功能是按部门号排序所有职工的部门号。我们按5的时候,界面上会显示出《排序完成!》的命令。如图(6)所示:

图(6)按部门号排序 6.输出所有的部门号 该模块儿的功能是显示出已排序好的所有部门号。操作如图(7)所示: 图(7)输出所有的部门号 7.按职工的工资排序 该模块儿的功能是按工资排序所有职工的工资。我们按7的时候,界面上会显示出《排序完成!》的命令。如图(8)所示:

数据结构实验报告-图的遍历

数据结构实验报告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include #include #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX] ; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;iarcs[i][j]=0;

数据结构——二叉树基本操作源代码

数据结构二叉树基本操作 (1). // 对二叉树的基本操作的类模板封装 //------------------------------------------------------------------------------------------------------------------------ #include using namespace std; //------------------------------------------------------------------------------------------------------------------------ //定义二叉树的结点类型BTNode,其中包含数据域、左孩子,右孩子结点。template struct BTNode { T data ; //数据域 BTNode* lchild; //指向左子树的指针 BTNode* rchild; //指向右子树的指针 }; //------------------------------------------------------------------------------------------------------------------------ //CBinary的类模板 template class BinaryTree { BTNode* BT; public: BinaryTree(){BT=NULL;} // 构造函数,将根结点置空 ~BinaryTree(){clear(BT);} // 调用Clear()函数将二叉树销毁 void ClearBiTree(){clear(BT);BT=NULL;}; // 销毁一棵二叉树 void CreateBiTree(T end); // 创建一棵二叉树,end为空指针域标志 bool IsEmpty(); // 判断二叉树是否为空 int BiTreeDepth(); // 计算二叉树的深度 bool RootValue(T &e); // 若二叉树不为空用e返回根结点的值,函数返回true,否则函数返回false BTNode*GetRoot(); // 二叉树不为空获取根结点指针,否则返回NULL bool Assign(T e,T value); // 找到二叉树中值为e的结点,并将其值修改为value。

数据结构实验---图的储存与遍历

数据结构实验---图的储存与遍历

学号: 姓名: 实验日期: 2016.1.7 实验名称: 图的存贮与遍历 一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 V0 V1 V2 V3 V4 三、附录: 在此贴上调试好的程序。 #include #include #include V0 V1 V4 V3 V2 ??? ? ??? ? ????????=010000000101010 1000100010A 1 0 1 0 3 3 4

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

数据结构串基本操作代码

实验三串 //串的基本操作 #include "stdio.h" #include "stdlib.h" #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; void strlength(SString S)//求字串并放到 S[0] 中 { int m; for(m=1;S[m]!='\0';m++); S[0]=m-1; } void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{ strlength(S); int i; for(i=S[0];i>=n;i--) S[i+1]=S[i]; S[n]=a; S[S[0]+2]='\0'; } int compare(SString S,SString T) { strlength(S); strlength(T); int i; for(i=1;i<=S[0]&&i<=T[0];i++) { if(S[i]>T[i]) return 1; if(S[i]T[0]) return 1;

else if(S[0]S[0]||len<0||len>S[0]-pos+1) { printf("Error!position or length is out of range\n"); return 0; } for(i=1;i<=len;i++)

数据结构图的遍历

#include"stdlib.h" #include"stdio.h" #include"malloc.h" #define INFINITY 32767 #define MAX_VERTEX_NUM 20 typedef enum{FALSE,TRUE}visited_hc; typedef enum{DG,DN,UDG,UDN}graphkind_hc; typedef struct arccell_hc {int adj; int*info; }arccell_hc,adjmatrix_hc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct {char vexs[MAX_VERTEX_NUM]; adjmatrix_hc arcs; int vexnum,arcnum; graphkind_hc kind; }mgraph_hc; typedef struct arcnode_hc {int adjvex; struct arcnode_hc *nextarc; int*info; }arcnode_hc; typedef struct vnode_hc {char data; arcnode_hc *firstarc; }vnode_hc,adjlist_hc[MAX_VERTEX_NUM]; typedef struct {adjlist_hc vertices; int vexnum,arcnum; graphkind_hc kind; }algraph_hc; int locatevex_hc(mgraph_hc*g,char v) {int i,k=0; for(i=0;ivexnum;i++) if(g->vexs[i]==v){k=i;i=g->vexnum;} return(k);}

通讯录管理 数据结构

#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/ee17293330.html,,p->data.phone,p->data.addr); Insertnode(head,p); break; case 3: printf(" ******************************\n"); printf(" ******* 通讯录信息查询*******\n");

数据结构串的操作实验报告

实验报告 课程数据结构实验名称实验三串 学号姓名实验日期: 串的操作 实验目的: 1. 熟悉串类型的实现方法,了解简单文字处理的设计方法; 2. 熟悉C语言的字符和把字符串处理的原理和方法; 3. 熟悉并掌握模式匹配算法。 实验原理: 顺序存储结构下的关于字符串操作的基本算法。 模式匹配算法BF、KMP 实验内容: 4-19. 在4.4.3节例4-6的基础上,编写比较Brute-Force算法和KMP算法比较次数的程序。 4-20. 设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V),即要求在主串S中,从位置start开始查找是否存在字串T。若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0;并要求设计主函数进行测试。一个测试例子为:S=“I am a student”,T=“student”,V=“teacher”。程序代码: 4-19的代码: /*静态存储结构*/ typedef struct { char str[MaxSize]; int length; }String; /*初始化操作*/ void Initiate(String *S) { S->length=0; } /*插入子串操作*/ int Insert(String *S, int pos, String T) /*在串S的pos位置插入子串T*/ { int i; if(pos<0||pos>S->length) { printf("The parameter pos is error!\n"); return 0; } else if(S->length+T.length>MaxSize)

数据结构课程设计之图的遍历和生成树求解

##大学 数据结构课程设计报告题目:图的遍历和生成树求解 院(系):计算机工程学院 学生: 班级:学号: 起迄日期: 2011.6.20 指导教师:

2010—2011年度第 2 学期 一、需求分析 1.问题描述: 图的遍历和生成树求解实现 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(及其孩子结点)相关但只能和上一层中一个元素(即双亲结点)相关;而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 生成树求解主要利用普利姆和克雷斯特算法求解最小生成树,只有强连通图才有生成树。 2.基本功能 1) 先任意创建一个图; 2) 图的DFS,BFS的递归和非递归算法的实现 3) 最小生成树(两个算法)的实现,求连通分量的实现 4) 要求用邻接矩阵、邻接表等多种结构存储实现 3.输入输出

输入数据类型为整型和字符型,输出为整型和字符 二、概要设计 1.设计思路: a.图的邻接矩阵存储:根据所建无向图的结点数n,建立n*n的矩阵,其中元素全是无穷大(int_max),再将边的信息存到数组中。其中无权图的边用1表示,无边用0表示;有全图的边为权值表示,无边用∞表示。 b.图的邻接表存储:将信息通过邻接矩阵转换到邻接表中,即将邻接矩阵的每一行都转成链表的形式将有边的结点进行存储。 c.图的广度优先遍历:假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再访问此邻接点的未被访问的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中还有未被访问的,则另选未被访问的重复以上步骤,是一个非递归过程。 d.图的深度优先遍历:假设从图中某顶点v出发,依依次访问v的邻接顶点,然后再继续访问这个邻接点的系一个邻接点,如此重复,直至所有的点都被访问,这是个递归的过程。 e.图的连通分量:这是对一个非强连通图的遍历,从多个结点出发进行搜索,而每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为其连通分量的顶点集。本程序利用的图的深度优先遍历算法。 2.数据结构设计: ADT Queue{ 数据对象:D={a i | a i ∈ElemSet,i=1,2,3……,n,n≥0} 数据关系:R1={| a i-1 ,a i ∈D,i=1,2,3,……,n} 基本操作: InitQueue(&Q) 操作结果:构造一个空队列Q。 QueueEmpty(Q) 初始条件:Q为非空队列。 操作结果:若Q为空队列,则返回真,否则为假。 EnQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:插入元素e为Q的新的队尾元素。 DeQueue(&Q,e) 初始条件:Q为非空队列。 操作结果:删除Q的队头元素,并用e返回其值。}ADT Queue

(完整版)通讯录管理系统数据结构毕业课程设计(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()语句来实现数据的读取;

数据结构 图的存储、遍历与应用 源代码

实验四图的存储、遍历与应用姓名:班级: 学号:日期:一、实验目的: 二、实验内容: 三、基本思想,原理和算法描述:

四、源程序: (1)邻接矩阵的存储: #include #include #define INFINITY 10000 //定义最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef int AdjMatrix[MAX_VERTEX_NUM ][MAX_VERTEX_NUM ]; typedef struct{ int vexs[MAX_VERTEX_NUM ]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧或边数 }MGraph; void CreatGragh(MGraph G) //用邻接矩阵构造图 { int i,j,k,w; printf("请输入顶点个数和边数:\n"); scanf("%d %d",&G.vexnum,&G.arcnum); printf("请按顺序输入顶点中间用‘空格’间隔\n"); for(i=0;i #include

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

数据结构课程设计通讯录 的制作 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

数据结构-串的查找与替换不会源程序

数据结构课程设计 ———串的查找与替换、

目录 (一)设计思路 (1) (二)问题描述 (1) (三)内容要求 (1) (四)设计目的 (1) (五)设计实现 (5) (六)设计调试 (10) (七)设计总结 (15) (八)参考文献 (15)

(一)设计目的 数据结构课程设计的目的是:通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。 (二)问题描述: 打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。 (三)内容要求: 1.根据题目要求进行需求分析,分析出该项任务的主要功能和设计重点。 2.根据需求分析的内容划分模块 3.进行程序设计 (四)设计思路 计算机上的非数值处理的对象基本上上字符串数据,字符串一般简称为串。串(string)是由零个或多个字符组成的有限序列,一般记为s=`a1a2…an`(n 大于零)。通常称字符在序列中的序号为该字符在串中的位置,子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。当两个串的每个字符都相等时(串值相等),称这两个串是相等的。 在子串的查找定位过程中,分别利用计数指针j和k指示被替换串和替换串中当前正待比较的字符位置。所用算法的基本思想是:首先利用指针i来完成被替换串和替换串在文本中的遍历,从被替换串和替换串的第一个字符起进行比较,若相等则继续逐个比较后续字符;否则完成一次比较,指针i递增进行下一次的比较。以此类推,直至匹配成功。 现根据问题描述作如下分析: 首先利用标准库函数fopen()打开一个文件,然后从文件中读取字符串保

数据结构伪代码转化成为可执行源代码修订稿

数据结构伪代码转化成为可执行源代码 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

数据结构伪代码转化为源代码尊重原作者的劳动,我只是个学习者,见此文章,感觉很有用,愿与大家一起分 享 -----百度文库:桔紫蓝 */ -------------------------------------------------------------------------------------- */ 出自:编程中国 */ 时间: 2007-10-26编程论坛首发 */ 声明:尊重作者劳动,转载请保留本段文字 */ -------------------------------------------------------------------------------------- 前言:这些是前几年我在大专教书时,数据结构课程中给学生写的学习例程,对于初学者有一定帮助。在此收集到一起,当个共享贴贡献给广大网友和编程爱好者。一般程序都不难也不大,并且所有例程均有较详细注释,适合自学。中间有一个“哈夫曼编码”,程序较大,希望能给大家一点启示。以下所有程序均在VC++开发环境中调试通过,运行正常。有任何疑问可以“另外”发贴讨论。更多内容请访问我的博客。 自认为本贴内容充实,对网友会所很大帮助,请版主或者管理员置顶加精,谢谢。 数据结构与算法基本程序目录 一、线性表及其操作 1、尾插法建立一个单链表,并按顺序输出 2、单链表的元素查找,按内容查找 3、元素插入操作 4、按内容元素删除操作 5、按位置删除元素

6、建立双向链表 7、单链表就地逆置 8、约瑟夫环问题 二、栈及其操作 1、建立堆栈 2、进栈与出栈 3、栈的应用,括号匹配 三、队及其操作 1、链队列的建立 2、入队和出队 3、循环队列建立 4、循环队列的入队和出队操作 四、串及其操作 1、串的朴素匹配 五、树(二叉树)及其操作 1、二叉排序树 2、哈夫曼编码 六、排序 1、冒泡排序 2、直接选择排序法 一、线性表及其操作

数据结构 图的遍历(初始化图)

实践四:图及图的应用 1.实验目的要求 理解图的基本概念,两种主要的存储结构。掌握在邻接链表存储结构下的图的深度优先递归遍历、广度优先遍历。通过选做题"最短路径问题"认识图及其算法具有广泛的应用意义。 实验要求:正确调试程序。写出实验报告。 2.实验主要内容 2.1 在邻接矩阵存储结构下的图的深度优先递归遍历、广度优先遍历。 2.1.1 要完成图的两种遍历算法,首先需要进行图的数据初始化。为把时间主要花在遍历算法的实现上,图的初始化采用结构体声明时初始化的方法。示例代码如下: #include "stdio.h" typedef int Arcell; typedef int AdjMatrix[5][5]; typedef struct { char vexs[5]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; void main(){ MGraph g={ {'a','b','c','d','e'}, {{0,1,0,1,0}, {1,0,0,0,1}, {1,0,0,1,0}, {0,1,0,0,1}, {1,0,0,0,0}} ,5,9}; } 2.1.2 深度优先遍历算法7.5中FirstAdjVex方法和NextAdjVex方法需要自己实现。 2.2 拓扑排序,求图的拓扑序列 2.3 "最短路径问题",以校园导游图为实际背景进行设计。(选做) 程序代码如下: #include

#include #define TRUE 1 #define FALSE 0 #define MAX 20 #define NULL 0 #define OK 1 #define OVERFLOW -2 #define ERROR 0 typedef int Status; typedef int Boolean; typedef int QElemType; // 图的邻接矩阵存储结构typedef struct ArcCell{ int adj; }ArcCell, AdjMatrix[20][20]; typedef struct { char vexs[20]; AdjMatrix arcs; int vexnum,arcnum; }Graph; //队列的链式存储结构typedef struct QNode{ QElemType data; struct QNode * next; }QNode, *QueuePtr;

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