软件开发人员信息管理系统、讲解人员信息管理系统、C++程序辅导
- 首页 >> C/C++编程实践3:基于链式存储的人员信息管理系统
目的
掌握线性表的链式存储
内容
链式存储结构的设计、访问
作业要求
实践2的内容改为链式存储。
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define OK 1//符号常量
#define ERROR -1
typedef int Status;
struct DATE //日期结构体类型
{ int month, day, year; };
typedef char NAME[20];//姓名字符数组类型
typedef char ADDRESS[500];//住址字符数组类型
typedef struct//人员结构体类型定义
{
int num;//编号,变量成员
NAME name; //姓名,数组成员
char sex; //性别,变量成员
struct DATE birth;//日期,变量成员
float salary;//工资,变量成员
ADDRESS address;//住址,数组成员
}PERSON;//人员数据类型
typedef struct NODE
{
PERSON person;//人员集合
struct NODE *next;//实际人数
}PEOPLE;//人员集合结构体类型定义
void Init();//函数声明
void Input();
Status Add();
Status Update();
Status Delete();
Status Locate();
void Sort();
void Display();
void DisplayAll();
void DisplayPerson();
void Menu();
void main()
{
PEOPLE people;//定义人员存储空间
Init(&people); //初始化人员集合
}
实践4:树搜索
目的
(1)树的数据结构设计
(2)树的搜索算法实现
内容
(1)深度优先或广度优先的搜索
(2)判断一个节点是否在树中
作业要求
(1)设计一棵树,并实现树的存储建立
(2)实现判断一个节点在树中返回“真”,否则返回“假”
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define NAMESIZE 20
#define TRUE 1
#define FALSE 0
typedef int STATUS;
typedef char NODE[NAMESIZE];
struct BROTHERNODE
{
NODE node; //节点
struct BROTHERNODE *next; //兄弟节点
};
typedef struct BROTHERNODE *BROTHER;
typedef struct BROTHERNODE *STACK;
struct PARENTNODE
{
NODE node; //双亲节点
BROTHER children; //子节点
};
typedef struct PARENTNODE PARENT;
struct TREENODE
{
PARENT node; //节点
struct TREENODE *next; //其他节点
};
typedef struct TREENODE *TREE;
BROTHER AddABrother(BROTHER br, NODE node)
void priBrothers(BROTHER br) //显示兄弟节点
TREE Form_Pa_Ch(NODE pa, BROTHER br) //父节点和兄弟节点构成子树
TREE AddAsubTree(TREE tree, TREE subtree) //子树加入树中
void priTree(TREE tree) //显示树
BROTHER ClearBrothers(BROTHER br) //回收兄弟节点空间
TREE ClearTree(TREE tree) //回收树空间
void CreateStr(char *brotherset) //字符数组转换为多个字符串
BROTHER CreateBrothers(BROTHER brothers, char *brotherset) //若干节点构成入兄弟
TREE CreateTree(TREE tree, char *filename) //从文件创建树
BROTHER ExpandNodes(TREE tree, NODE pa) //有节点获取所有子节点
BROTHER CopyBrothers(BROTHER children) //节点集拷贝
STACK PushChildren(STACK stack, BROTHER children) //所有节点进栈
void priStack(STACK stack) //显示栈
STACK PopAChild(STACK stack, NODE child) //退栈
STACK ClearStack(STACK stack) //回收栈空间
STATUS Determine(TREE tree, NODE n) //判断节点是否在树中,深度优先搜索
实践5:树路径求解
目的
(1)树的数据结构设计
(2)树的路径求解实现
内容
(1)深度优先或广度优先的搜索
(2)求解从树根到指定节点的路径
作业要求
(1)设计一棵树,并实现树的存储建立
(2)实现树根到指定节点的路径,如果指定节点不存在,返回空路径(即不可到达)
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define NAMESIZE 20
#define TRUE 1
#define FALSE 0
typedef int STATUS;
typedef char NODE[NAMESIZE];
struct BROTHERNODE
{
NODE node; //节点
struct BROTHERNODE *next; //兄弟节点
};
typedef struct BROTHERNODE *BROTHER;
struct PARENTNODE
{
NODE node; //双亲节点
BROTHER children; //子节点
};
typedef struct PARENTNODE PARENT;
struct TREENODE //树的节点存储类型
{
PARENT node; //节点
struct TREENODE *next; //其他节点
};
typedef struct TREENODE *TREE; //树
typedef struct BROTHERNODE *PATH; //路径
struct PATHS //路径集合
{
PATH path;
struct PATHS *next;
};
typedef struct PATHS *STACK; //路径栈
BROTHER AddABrother(BROTHER br, NODE node) //加入一个节点到节点集
void priBrothers(BROTHER br) //显示兄弟节点集
TREE Form_Pa_Ch(NODE pa, BROTHER br) //父节点和兄弟节点构成子树
TREE AddAsubTree(TREE tree, TREE subtree) //子树加入树中
void priTree(TREE tree) //显示树
BROTHER ClearBrothers(BROTHER br) //回收兄弟节点空间
TREE ClearTree(TREE tree) //回收树空间
void CreateStr(char *brotherset) //字符数组转换为多个字符串
BROTHER CreateBrothers(BROTHER brothers, char *brotherset) //若干节点构成入兄弟
TREE CreateTree(TREE tree, char *filename) //从文件创建树
BROTHER ExpandNodes(TREE tree, NODE pa) //有节点获取所有子节点
BROTHER CopyBrothers(BROTHER children) //节点集拷贝
PATH AddANodeToPath(NODE node, PATH path) //节点加入路径中
PATH CopyPath(PATH path) //拷贝路径
struct PATHS *CopyPaths(struct PATHS *paths) //拷贝路径集
void RevPath(PATH path) //路径倒叙
void priPath(PATH path) //显示路径
struct PATHS* AddAPathToPaths(PATH path,struct PATHS* paths)
struct PATHS* FormPathsFromNodes(BROTHER brothers, PATH path, struct PATHS* paths )
void priPaths(struct PATHS *paths) //显示路径
PATH ClearPath(PATH path)
struct PATHS* ClearPaths(struct PATHS* paths) //回收树空间
STACK PushAPath(STACK stack, PATH path) //一个路径进栈
STACK PushPaths(STACK stack, struct PATHS *paths) //所有路径进栈
void priStack(STACK stack) //显示栈
STACK PopANode(STACK stack, NODE node, PATH *path) //退栈,获取节点和路径
STACK ClearStack(STACK stack) //回收栈空间
STATUS SearchPath(TREE tree, NODE start, NODE end,PATH *path) //判断节点是否在树中,并求取路径
实践6:图路径求解
目的
(1)图的数据结构设计
(2)图的路径求解实现
内容
(1)深度优先或广度优先的搜索
(2)求解指定节点到另一指定节点的路径
作业要求
(1)设计一张连通图,并实现图的存储建立
(2)实现指定节点到另一指定节点的路径。如果路径不存在,返回空路径
(3)在图路径基础上,实现九宫格的路径求解
实践7:启发式搜索
目的
高效问题求解算法设计
内容
(1)启发式函数设计
(2)图路径求解
(3)启发信息应用
内容
以九宫格为例实现启发式问题求解