#include "GeneralizedLists.h" //引用广义表的头文件
#include <string> //引用string库函数的头文件
using namespace std;//指出后续的所有的程序语句都在名字空间std内
/*
前置条件:人员信息对象(Personnel)不存在
输入:人员的相应信息st,st的格式为:高老师-教授-0,三部分信息用 "-" 隔开,
第一部分表示姓名,第二部分表示职称,第三部分表示类型:0为教师;1为研究生 ;2为本科生
功能:把字符串st表示的信息转化为人员信息对象(Personnel)
输出:无
后置条件:构造一个人员信息对象(Personnel)
*/
Personnel::Personnel(string st)
{
int ipos = st.find('-');//确定st中第一个"-"的位置
string strtemp = st.substr(0,ipos);//取得第一部分信息
personnelname = strtemp;//把取得第一部分信息初始化姓名
st = st.substr(ipos+1,st.length()-ipos-1);//得到剩下的字符串
ipos = st.find('-');//确定st中第二个"-"的位置
strtemp = st.substr(0,ipos);//取得第二部分信息
personnelinfo = strtemp;//把取得第二部分信息初始化班级或职称
st = st.substr(ipos+1,st.length()-ipos-1);//取得第三部分信息
tag = st[0]-'0';//把取得第三部分信息初始化类型
}
/*
前置条件:人员信息对象(Personnel)已存在
输入:无
功能:读取学生的班级信息或教师的职称信息
输出:学生班级信息的字符串形式或教师职称信息的字符串形式
后置条件:人员信息对象(Personnel)不变化
*/
string Personnel::GetPersonnelinfo()
{
return this->personnelinfo;
}
/*
前置条件:人员信息对象(Personnel)已存在
输入:无
功能:读取人员类型信息
输出:人员类型(0,1,2)
后置条件:人员信息对象(Personnel)不变化
*/
int Personnel::GetTag()
{
return this->tag;
}
/*
前置条件:人员信息对象(Personnel)已存在
输入:无
功能:读取人员姓名
输出:人员姓名
后置条件:人员信息对象(Personnel)不变化
*/
//返回人员姓名
string Personnel::GetPersonnelname()
{
return this->personnelname;
}
/*
前置条件:广义表不存在
输入:两个广义表(lsl、1s2)
功能:以lsl为表头和以1s2为表尾初始化广义表
输出:无
后置条件:构建一个广义表
*/
template <class T>
GLists<T>::GLists(GLists ls1, GLists ls2)
{
ls = new GLNode<T>;//建立广义表的头指针
ls->tag = 1; //设置这个节点为子表
GLNode<T>* p,*q;
p = new GLNode<T> ;
q = new GLNode<T> ;
*p = *ls1.ls;
*q = *ls2.ls;
ls->ptr.hp = p; //把头指针指向ls1
ls->ptr.tp = q; //把尾指针指向ls2
}
/*
前置条件:广义表不存在
输入:广义表信息的字符串形式(st)
功能:把字符串st表示的广义表信息初始化广义表
输出:无
后置条件:构建一个广义表
*/
template <class T>
GLists<T>::GLists(string st)
{
outflag =false;Numbergraduate =0;NumberStudent=0;
ls=Crtlists(st);
}
/*
前置条件:广义表已存在
输入:老师的姓名(manname)和广义表的头指针(ls)
功能:统计ls所指的广义表中的姓名为manname的老师所带的学生人数。本过程是递归过程,当ls为空指针时,无需任何处理,否则可分元素节点和表节点两种情况
当ls指向表节点时,首先判断它的头节点是不是元素节点,且看它的值是不是要统计学生的老师的姓名mannameg,
如果是那么设置outflag标识,以后出现的元素都是他的学生,就可以统计人数,再递归调用本过程。
当ls指向元素节点时,如果是outflag标识为true,则统计学生数
输出:无
后置条件:广义表不变
*/
template <class T>
void GLists<T>::StatisticInfo(GLNode<T>* ls,string mannameg)
{
GLNode<T>* p;
if(ls !=NULL) //如果ls为空退出,不空执行下面的操作
{
if(ls->tag == 1) //判断节点是不是表节点
{
if(ls->ptr.hp->tag ==0 ) //判断ls的头节点是不是元素节点
if(ls->ptr.hp->data.GetPersonnelname()==mannameg)
outflag = true;
StatisticInfo(ls->ptr.hp,mannameg);p = ls->ptr.tp; // 再递归调用本过程
while(p!=NULL) //重复该过程处理所有其它成员
{
StatisticInfo(p->ptr.hp,mannameg);p = p->ptr.tp;
}
}
else
{
if(outflag) //outflag标识为true时,统计学生数
{
if( ls->data.GetTag() == 1) //研究生人数
Numbergraduate++;
if( ls->data.GetTag() == 2) //本科生人数
NumberStudent++;
}
}
}
}
/*
前置条件:广义表已存在
输入:广义表的头指针(ls)
功能:显示广义表。本过程是递归过程,当ls为空指针时,无需任何处理,否则可分元素节点和表节点两种情况
当ls指向元素节点时,只要输出元素节点的值,当ls指向表节点时,先输出"(" ,再递归调用本过程输出该广义表的
第一个成员,接着再输出一个","与广义表的下一个成员;重复该过程的处理,直到所有成员都处理完,最后再输出一个")"。
输出:无
后置条件:广义表不变
*/
template <class T>
void GLists<T>::Prt(GLNode<T>* ls)
{
GLNode<T>* p;
if(ls !=NULL) //如果ls为空退出,不空执行下面的操作
{
if(ls->tag == 1) //判断节点是不是表节点
{
Ena("("); // 先输出"("
Prt(ls->ptr.hp);p = ls->ptr.tp; // 再递归调用本过程输出该广义表的第一个成员,
while(p!=NULL) //重复该过程处理所有其它成员
{
Ena(","); //成员之间加个逗号
Prt(p->ptr.hp);p = p->ptr.tp;
};
Ena(")");
}
else // ls指向元素节点时输出元素节点的值
{
Ena(ls->data.GetPersonnelname());
Ena("-");
Ena(ls->data.GetPersonnelinfo());
Ena("-");
char chtemp = '0'+ls->data.GetTag();
string tt="";
tt=chtemp;
Ena(tt);
}
}
}
/*
前置条件:广义表已存在
输入:需要保存的字符串(str)
功能:把字符串str存到广义表成员stprt中,已备以后输出
输出:无
后置条件:广义表成员stprt添加了新字符
*/
template <class T>
void GLists<T>::Ena(string str)
{
stprt+=str;
}
/*
前置条件:广义表已存在
输入:老师的姓名(mannameg)和广义表的头指针(ls)
功能:显示ls所指的广义表中的姓名为manname的老师所带的学生
输出:无
后置条件:广义表不变
*/
template <class T>
void GLists<T>::StudentInfo(GLNode<T>* ls,string mannameg)
{
GLNode<T>* p;
if(ls !=NULL)
{
if(ls->tag == 1)
{
StudentInfo(ls->ptr.hp,mannameg);p = ls->ptr.tp;
if(ls->ptr.hp->tag ==0 )
if(ls->ptr.hp->data.GetPersonnelname()==mannameg)
outflag = true;
while(p!=NULL)
{
StudentInfo(p->ptr.hp,mannameg);p = p->ptr.tp;
}
}
else
{
if(outflag)
{
Ena(ls->data.GetPersonnelname());
Ena("-");
Ena(ls->data.GetPersonnelinfo());
Ena("-");
char chtemp = '0'+ls->data.GetTag();
string tt="";
tt=chtemp;
Ena(tt);
Ena(" ");
}
}
}
}
/*
前置条件:广义表已存在
输入:无
功能:显示广义表
输出:无
后置条件:广义表不变
*/
template <class T>
void GLists<T>::Prnt()
{
Prt(ls);
cout<<stprt.c_str();
}
/*
前置条件:广义表已存在
输入:姓名(mannameg)和广义表的头指针(ls)
功能:查询ls所指的广义表中姓名为mannameg的信息
输出:无
后置条件:广义表不变
*/
template <class T>
void GLists<T>::QueryInfo(GLNode<T>* ls,string mannameg)
{
GLNode<T>* p;
if(ls !=NULL)
{
if(ls->tag == 1)
{
QueryInfo(ls->ptr.hp,mannameg);p = ls->ptr.tp;
while(p!=NULL)
{
QueryInfo(p->ptr.hp,mannameg);p = p->ptr.tp;
};
}
else
{
string ttg = ls->data.GetPersonnelname();
if(ttg==mannameg)
{
Ena(ls->data.GetPersonnelname());
Ena("-");
Ena(ls->data.GetPersonnelinfo());
Ena("-");
char chtemp = '0'+ls->data.GetTag();
string tt="";
tt=chtemp;
Ena(tt);
}
}
}
}
/*
前置条件:无
输入:源字符串(st)和目标字符串(hst)的引用
功能:从st中取出第一成员存入到hst,其余的成员留在st中。读字符到",",根据它取出第一成员,前面的存入hst,后边存入s。由于表的嵌套,所遇到","不一定时最外层的','.
故设置变量k表示括号的配对情况,其初始值为0,当遇到左括号时k加一,当遇到右括号时减一。于是两部分的分界符:
如果扫描结束时还没有碰到',',说明已取得最后一个成员,于是st全存入hst,st置为空值。
输出:无
后置条件:无
*/
template <class T>
void GLists<T>::Server(string &st,string &hst)
{
c
没有合适的资源?快使用搜索试试~ 我知道了~
C++版数据结构(全部结构的源码+详细注释)
共293个文件
doc:150个
cpp:63个
h:33个
4星 · 超过85%的资源 需积分: 38 47 下载量 114 浏览量
2012-01-06
08:21:47
上传
评论 7
收藏 2.97MB RAR 举报
温馨提示
C++版数据结构,全部结构应有尽有,源码及详细注释
资源推荐
资源详情
资源评论
收起资源包目录
C++版数据结构(全部结构的源码+详细注释) (293个子文件)
GeneralizedLists.cpp 16KB
graph.cpp 10KB
tree.cpp 8KB
treemain.cpp 7KB
graph.cpp 7KB
graph.cpp 7KB
BroadList.cpp 6KB
graphmain.cpp 6KB
sort.cpp 6KB
GeneralizedListsApplication.cpp 4KB
tree.cpp 4KB
graphmain.cpp 4KB
inthrbitree.cpp 4KB
bisorttree.cpp 4KB
StudentSeqListApplication.cpp 4KB
bitree.cpp 3KB
LinkList.cpp 3KB
LinkList.cpp 3KB
CirQueueMain.cpp 3KB
SparseMatrix.cpp 3KB
graphmain.cpp 3KB
CirQueue.cpp 3KB
sortmain.cpp 3KB
SeqList.cpp 2KB
String.cpp 2KB
SeqListMain.cpp 2KB
BothStack.cpp 2KB
StudentSeqList.cpp 2KB
LinkListMain.cpp 2KB
LinkQueue.cpp 2KB
LinkListMain.cpp 2KB
CirQueue.cpp 2KB
LinkStack.cpp 2KB
SeqStack.cpp 1KB
BothStackMain.cpp 1KB
LinkSearch.cpp 1KB
StringMain.cpp 1KB
SparseMatrixMain.cpp 1KB
Chaining.cpp 1KB
BinSearch2Main.cpp 1006B
BroadListMain.cpp 1003B
LinkStackMain.cpp 966B
BinSearchMain.cpp 957B
SeqSearchMain.cpp 937B
CirQueueMain.cpp 884B
LinkQueueMain.cpp 840B
bisorttreemain.cpp 834B
SeqStackMain.cpp 715B
member.cpp 690B
BFMain.cpp 671B
bitreemain.cpp 543B
treemain.cpp 455B
ChainingMain.cpp 394B
LinkSearchMain.cpp 377B
BinSearch.cpp 376B
BinSearch2.cpp 373B
BF.CPP 370B
HashSearch.cpp 366B
inthrbitreemain.cpp 365B
HashSearchMain.cpp 346B
SeqSearch.cpp 208B
binode.cpp 0B
Node.cpp 0B
数据结构ch07.doc 1.72MB
数据结构ch03.doc 1.62MB
数据结构ch02.doc 1.41MB
广义表应用方案.doc 1.19MB
数据结构ch04.doc 1.08MB
数据结构ch05.doc 1.04MB
校园最短路径的设计方案.doc 736KB
数据结构ch01.doc 725KB
学生会组织机构的设计方案.doc 616KB
数据结构ch06.doc 614KB
高校学籍管理问题设计方案.doc 57KB
高校实验任务安排问题设计方案.doc 31KB
中序线索链表构造函数算法InThrBiTree.doc 27KB
二叉排序树的删除算法DeleteBST.doc 26KB
二叉排序树的删除算法DeleteBST.doc 26KB
Dijkstra算法.doc 26KB
一元多项式求和算法Add.doc 26KB
稀疏矩阵转置算法Trans2.doc 26KB
拓扑排序算法TopSort.doc 26KB
顺序表类声明.doc 26KB
斐波那契查找伪代码.doc 25KB
哈夫曼算法HuffmanTree.doc 25KB
快速排序一次划分算法Partition.doc 25KB
最小生成树算法Prim.doc 25KB
Floyd算法.doc 25KB
二叉链表类声明.doc 25KB
二叉树的前序遍历非递归算法PreOrder.doc 25KB
二叉树的层序遍历算法LeverOrder.doc 25KB
二叉树的后序遍历非递归算法PostOrder.doc 25KB
起泡排序算法BubbleSort.doc 25KB
稀疏矩阵转置算法Trans1.doc 25KB
顺序栈类声明.doc 25KB
两栈共享-类声明.doc 25KB
链栈类声明.doc 25KB
循环队列类声明.doc 25KB
火车车厢重排伪代码.doc 25KB
基于邻接矩阵存储结构类声明.doc 25KB
共 293 条
- 1
- 2
- 3
资源评论
- SamXCode2012-07-18只能说一般了
- gamer672012-05-03一般 代码不是很好
超级绘图王
- 粉丝: 1
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功