• 大小: 0.01M
    文件类型: .cpp
    金币: 2
    下载: 0 次
    发布日期: 2024-01-31
  • 语言: C/C++
  • 标签: 其他  

资源简介

consts.cpp

资源截图

代码片段和文件信息

#include“consts.h“

typedef struct GLNode
{
char name[100]; /* 教师或学生的姓名 */
char prof[100]; /* 教师结点表示职称,学生结点表示班级 */
int type; /* 结点类型:0--教师,1--研究生,2--本科生 */
struct {struct GLNode *hp*tp;}ptr;/* hp 指向同级的下一结点,tp 指向下级的首结点 */
}GList;

GList *GListCreate(char *str)/*建立广义表*/
{
GList *head*p*q*m*a;/* 简要介绍:head 指向头结点不变;p 指向导师结点;q 指向研究生结点;a 指向本科生节点; m 指向新建立的节点*/
int i = 0j = 0flag = 0flag1 = 0flag2=0len = strlen(str);
head=p=q=m=a=NULL;
while(i < len)
{
if(str[i] == ‘)‘ || str[i] == ‘(‘ || str[i] == ‘‘|| str[i] == ‘)‘|| str[i] == ‘(‘|| str[i] == ‘,‘)
{i++;continue;}
else
{
if(!(m =(GList *)malloc(sizeof(GList)))) exit(1);
for(j=0;str[i] != ‘-‘;) /* 将字符串中的学生信息转化成学生结点 */
m->name[j++] = str[i++];
m->name[j] = ‘\0‘;
for(j=0++i;str[i] != ‘-‘;)
m->prof[j++] = str[i++];
m->prof[j] = ‘\0‘;
m->type = str[++i] - 48;
m->ptr.hp=m->ptr.tp=NULL;
i++;
if(m->type == 0) /* 导师结点的处理 */
{
if(flag)
{
p->ptr.hp=m; /* 非首结点 */
p=m;
}
else
{
head=p=m; /* 首结点的处理 */
flag=1;
}
flag1=0;
a=q=m; /* a 在此等于 m主要是处理本科生直属于导师的情
况 */
}
else if(m->type==1) /* 研究生结点 */
{
if(flag1)
{
q->ptr.hp=m; /* 非首结点的处理 */
q=m;
}
else
{
q->ptr.tp=m; /* 首结点的处理 */
q=m;
flag1=1;
}
flag2=0;
a=m;
}
else /* 本科生结点 */
{
if(flag2)
{
a->ptr.hp=m; /* 非首结点的处理 */
a=m;
}
else
{
a->ptr.tp=m; /* 首结点的处理 */
a=m;
flag2=1;
}
}
}
}
return head;
}

void GListPrint(GList *head)/*输出广义表*/
{
GList *p*q*a; /* 与 CreatGList 函数中的指向一样 */
int flag=0flag1=0flag2=0;
p = head;
printf(“(“);
while(TRUE) /* 导师范畴 */
{
if(p == NULL) break;
if(flag)
printf(“(%s-%s-%d“p->namep->profp->type);
else
{
printf(“(%s-%s-%d“p->namep->profp->type);
    flag=1;
}
q = p->ptr.tp;
flag2=flag1=0;
while(TRUE) /* 研究生或本科生范畴 */
{
if(q == NULL) break;
if(flag1)
if(q->type==1)
printf(“(%s-%s-%d“q->nameq->profq->type);
else
printf(“%s-%s-%d“q->nameq->profq->type);
else
{
printf(“(%s-%s-%d“q->nameq->profq->type);
flag1=1;
}
a = q->ptr.tp;
flag2 = 0;
while(TRUE) /* 本科生范畴 */
{
if(a == NULL) break;
if(flag2)
printf(“%s-%s-%d“a->namea->profa->type);
else
{
printf(“(%s-%s-%d“a->namea->profa->type);
flag2 = 1;
}
a = a->ptr.hp;
}
if(flag2) printf(“)“);
if(q->type==1 ||( q->ptr.hp==NULL))
printf(“)“);
q = q->ptr.hp;
}
printf(“)“);
p = p->ptr.hp;
}
printf(“)\n“);
}

GList *StudentInsert(GList *head)/* 插入学生 */
{
char slen[100]teacher[100]graduate[100];
GList *Slen*p*q;
int ij;
p = head;
printf(“请输入待插入学生信息,如:李刚-二班-1\n“);
scanf(“%s“slen);
if(!(Slen =(GList *)malloc(sizeof(GList))

评论

共有 条评论