else
{m=q;q = q->ptr.hp;} }
p = p->ptr.hp; } }
if(!flag)printf(\查无此人!\\n\ printf(\ return head; }
void Inquire(GList *head)/*查询信息*/ {
char slen[100]; GList *p,*q,*a,*m; int flag = FALSE; p = head;
printf(\请输入待查人员信息,如:李刚\\n\ scanf(\ while(p != NULL) {
q = p->ptr.tp;
if(!strcmp(p->name,slen))
{flag = TRUE;printf(\本人信息:姓名:%s 职称:%s 类型:导师\\n\
if(q->type == 2)/* 该导师直接带本科生 */ {
a = q;
while(a != NULL) {
if(!strcmp(a->name,slen)) {
printf(\本人信息:姓名:%s 班级:%s 类型:本科生\\n\
printf(\导师信息:姓名:%s 职称:%s\\n\ flag = TRUE; }
m = a;
a = a->ptr.hp; } } else {
while(q != NULL)
{
m = q;
a = q->ptr.tp;
if(!strcmp(q->name,slen)) {
printf(\本人信息:姓名:%s 班级:%s 类型:研究生\\n\
printf(\导师信息:姓名:%s 职称:%s\\n\ flag = TRUE; }
while(a != NULL) {
if(!strcmp(a->name,slen)) {
printf(\本人信息:姓名:%s 班级:%s 类型:本科生\\n\
printf(\导师信息:姓名:%s 职称:%s\\n\ printf(\研究生信息:姓名:%s 班级:%s\\n\ flag = 1; }
m = a;
a = a->ptr.hp; }
q = q->ptr.hp; } }
p = p->ptr.hp; }
if(!flag) printf(\查无此人!\\n\ printf(\}
void StudentCount(GList *head)/*统计导师的研究生、本科生人数*/ {
char teacher[100]; GList *p,*q,*a;
int Gra = 0,Ugra = 0; p = head;
printf(\请输入老师姓名:\\n\ scanf(\
while(strcmp(p->name,teacher)) {
p = p->ptr.hp;
if(p == NULL) break;
}
if(p == NULL) printf(\不存在该导师!\\n\ else {
q = p->ptr.tp;
while(q != NULL) {
Gra++;
a = q->ptr.tp;
while(a != NULL) {
Ugra++;
a = a->ptr.hp; }
q = q->ptr.hp; }
if(p->ptr.tp->type==1)
{printf(\研究生人数: %d\\n\ printf(\本科生人数: %d\\n\ else
printf(\本科生人数: %d\\n\ }
printf(\}
/*菜单函数*/ void Menu() {
printf(\ printf(\建立广义表\ printf(\插入学生\ printf(\删除学生\ printf(\查询信息\
printf(\统计导师的研究生、本科生人数\ printf(\输出广义表\ printf(\退出\
printf(\}
int main(int argc,char* argv[]) {
GList *Head; char str[100]; int choice; while(TRUE)
{
Menu();
scanf(\ switch(choice) {
case 1:
printf(\请输入您想建立的标准广义表,例如:((高老师-教授-0,(李平-一班-2,杨梅-二班-2)),(李平-博士-0,(李平-三班-1,(李平-四班-2))))\\n\ scanf(\
Head = GListCreate(str); break;
case 2: Head = StudentInsert(Head);break; case 3: Head = StudentDelete(Head);break; case 4: Inquire(Head);break;
case 5: StudentCount(Head);break; case 6: GListPrint(Head);break; case 7: return 0; } }
return 0; }