Data structures 在Pascal中搜索多级链表
因此,在这个项目中,我们被要求为一所大学创建一个数据库,大学分为学院,每个学院分为部门,同样,每个部门分为课程(专业),每个课程分为年级,每个年级都有一份学生名单。我使用链表实现了这一点,在用户填充数据库后,他们会获得一些与数据库交互的选项,例如添加和删除学生等。但是,当我尝试在数据库中搜索学生时,似乎搜索不好,尽管该方法在搜索课程时效果良好(它给出了课程所在的学院和系)。当程序执行时,它会给我们一条消息(“名称”在此数据库中不存在),这表明cmp仍然设置为0Data structures 在Pascal中搜索多级链表,data-structures,pascal,singly-linked-list,Data Structures,Pascal,Singly Linked List,因此,在这个项目中,我们被要求为一所大学创建一个数据库,大学分为学院,每个学院分为部门,同样,每个部门分为课程(专业),每个课程分为年级,每个年级都有一份学生名单。我使用链表实现了这一点,在用户填充数据库后,他们会获得一些与数据库交互的选项,例如添加和删除学生等。但是,当我尝试在数据库中搜索学生时,似乎搜索不好,尽管该方法在搜索课程时效果良好(它给出了课程所在的学院和系)。当程序执行时,它会给我们一条消息(“名称”在此数据库中不存在),这表明cmp仍然设置为0 Program Liked_lis
Program Liked_lists_database;
Type
Node = ^T;
T = record
age : string;
next, link : Node;
end;
Var
Head, Tail, Last, tmp, tmp2, tmp3, tmp4, tmp5 : Node;
y : string;
cmp : integer;
Begin
writeln('[+] Create your database [+]');
writeln;
Repeat
write('Enter the name of the faculty : ');
readln(j);
if (j='exit') then break;
if (Head = nil) then
Begin
new(Head);
Tail := Head;
End
Else
Begin
new(Tail^.next);
Tail := Tail^.next;
End;
Tail^.age := j;
Tail^.next := nil;
Repeat
Write('Enter the name of the department : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link=Nil) Then
Begin
new(Tail^.link);
Last := Tail^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Repeat
Write('Enter the name of the course : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link^.link=Nil) Then
Begin
new(Tail^.link^.link);
Last := Tail^.link^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Repeat
Write('Enter the grade : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link^.link^.link=Nil) Then
Begin
new(Tail^.link^.link^.link);
Last := Tail^.link^.link^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Repeat
Write('Enter the name of the student : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link^.link^.link^.link=Nil) Then
Begin
new(Tail^.link^.link^.link^.link);
Last := Tail^.link^.link^.link^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Until false;
Until false;
Until false;
Until false;
Until false;
writeln;
writeln('...The database has been created successfully!');
// Search for a student
writeln('[+] Search for a student');
write('Enter the name of the student to Search for : ');
readln(y);
tmp := Head;
cmp := 0;
if (cmp=0) then
While (tmp^.next<>Nil) Do
Begin
tmp2 := tmp^.link;
While (tmp2^.next<>Nil) Do
Begin
tmp3 := tmp2^.link;
While (tmp3^.next<>Nil) Do
Begin
tmp4 := tmp3^.link;
While (tmp4^.next<>Nil) Do
Begin
tmp5 := tmp4^.link;
While (tmp5^.next<>Nil) Do
Begin
if (tmp5^.age=y) then
cmp := cmp + 1;
tmp5 := tmp5^.next;
End;
if (cmp>0) then
tmp4^.next := Nil
Else
tmp4 := tmp4^.next;
End;
if (cmp>0) then
tmp3^.next := Nil
Else
tmp3 := tmp3^.next;
End;
if (cmp>0) then
tmp2^.next := Nil
Else
tmp2 := tmp2^.next;
End;
if (cmp>0) then
tmp^.next := Nil
Else
tmp := tmp^.next;
End;
if (cmp>0) then
Begin
writeln('Name : ',y);
writeln('Faculty : ', tmp^.age);
writeln('Department : ', tmp2^.age);
writeln('Speciality : ', tmp3^.age);
writeln('Grade : ', tmp4^.age);
End
Else
writeln(y, ' does not exist in this database');
End.
程序列表\u数据库;
类型
Node=^T;
T=记录
年龄:弦;
下一步,链接:节点;
结束;
变量
头、尾、尾、尾、tmp、tmp2、tmp3、tmp4、tmp5:节点;
y:字符串;
cmp:整数;
开始
writeln(“[+]创建数据库[+]”);
书面语;
重复
写('输入教员姓名:');
readln(j);
如果(j='exit'),则中断;
如果(水头=零),则
开始
新(首长);;
尾:=头;
终点
其他的
开始
新的(尾^下一个);
Tail:=Tail^.next;
结束;
尾^年龄:=j;
Tail^.next:=nil;
重复
填写('输入部门名称:');
Readln(j);
如果(j='exit'),则中断;
如果(Tail^.link=Nil),则
开始
新的(尾链接);
最后:=Tail^.link;
终点
其他的
开始
新的(上一次^下一次);
Last:=Last^.next;
结束;
最后年龄:=j;
Last^.next:=Nil;
重复
写('输入课程名称:');
Readln(j);
如果(j='exit'),则中断;
如果(Tail^.link^.link=Nil),则
开始
新的(尾部链接);
最后:=Tail^.link^.link;
终点
其他的
开始
新的(上一次^下一次);
Last:=Last^.next;
结束;
最后年龄:=j;
Last^.next:=Nil;
重复
写(‘输入成绩:’);
Readln(j);
如果(j='exit'),则中断;
如果(Tail^.link^.link^.link=Nil),则
开始
新增(尾链接^.link^.link^.link);
最后:=Tail^.link^.link^.link;
终点
其他的
开始
新的(上一次^下一次);
Last:=Last^.next;
结束;
最后年龄:=j;
Last^.next:=Nil;
重复
写('输入学生姓名:');
Readln(j);
如果(j='exit'),则中断;
如果(Tail^.link^.link^.link^.link^.link=Nil),则
开始
新建(Tail^.link^.link^.link^.link^.link);
最后:=Tail^.link^.link^.link^.link^.link;
终点
其他的
开始
新的(上一次^下一次);
Last:=Last^.next;
结束;
最后年龄:=j;
Last^.next:=Nil;
直到错误;
直到错误;
直到错误;
直到错误;
直到错误;
书面语;
writeln(“…数据库已成功创建!”);
//寻找学生
writeln(“[+]搜索学生”);
写('输入要搜索的学生的姓名:');
readln(y);
tmp:=水头;
cmp:=0;
如果(cmp=0),则
而(tmp^.nextNil)呢?
开始
tmp2:=tmp^.link;
而(tmp2^.nextNil)呢
开始
tmp3:=tmp2^.link;
而(tmp3^.nextNil)呢
开始
tmp4:=tmp3^.link;
而(tmp4^.nextNil)呢
开始
tmp5:=tmp4^.link;
而(tmp5^.nextNil)呢
开始
如果(tmp5^.age=y),则
cmp:=cmp+1;
tmp5:=tmp5^.next;
结束;
如果(cmp>0),则
tmp4^.next:=Nil
其他的
tmp4:=tmp4^.next;
结束;
如果(cmp>0),则
tmp3^.next:=Nil
其他的
tmp3:=tmp3^.next;
结束;
如果(cmp>0),则
tmp2^.next:=Nil
其他的
tmp2:=tmp2^.next;
结束;
如果(cmp>0),则
tmp^.next:=Nil
其他的
tmp:=tmp^.next;
结束;
如果(cmp>0),则
开始
writeln('名称:',y);
书面语(“教员:”,tmp^.年龄);
书面文件(‘部门:’,tmp2^年龄);
书面语(“专业:”,tmp3^.年龄);
书面语(‘年级:’,tmp4^.年龄);
终点
其他的
writeln(y,‘此数据库中不存在’);
结束。
编辑:问题在于多级链表和搜索算法的实现
Program Liked_lists_database;
Type
Node = ^T;
T = record
age : string;
next, link : Node;
end;
Var
Head, Tail, tmp, Last : Node;
j: string;
num : integer;
Procedure searchCourse;
Var
cmp : integer;
y : string;
tmp, tmp2, tmp3 : Node;
Begin
writeln('[+] Search for a course');
write('Enter the name of the course to Search for : ');
readln(y);
tmp := Head;
cmp := 0;
if (tmp^.next=Nil) Then
new(tmp^.next);
While (tmp^.next<>Nil) Do
Begin
tmp2 := tmp^.link;
if (tmp2^.next=Nil) Then
new(tmp2^.next);
While (tmp2^.next<>Nil) Do
Begin
tmp3 := tmp2^.link;
While (tmp3<>Nil) Do
Begin
if (tmp3^.age=y) Then
Begin
writeln('[', y, '] is found in faculty of [ ', tmp^.age, ']', ' department of [', tmp2^.age, ']');
cmp := 1;
End;
tmp3 := tmp3^.next;
End;
if (cmp=0) Then
Begin
tmp2 := tmp2^.next;
if (tmp2^.next=Nil) Then
new(tmp2^.next);
End
Else
tmp2^.next := Nil;
End;
if (cmp=0) Then
Begin
tmp := tmp^.next;
if (tmp^.next=Nil) Then
new(tmp^.next);
End
Else
tmp^.next := Nil;
End;
if (cmp=0) Then
writeln ('[', y, '] : there is no such course');
End;
Begin
// Fillin in the database
writeln('[+] Create your database [+]');
writeln;
Repeat
write('Enter the name of the faculty : ');
readln(j);
if (j='exit') then break;
if (Head = nil) then
Begin
new(Head);
Tail := Head;
End
Else
Begin
new(Tail^.next);
Tail := Tail^.next;
End;
Tail^.age := j;
Tail^.next := nil;
Repeat
Write('Enter the name of the department : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link=Nil) Then
Begin
new(Tail^.link);
Last := Tail^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Repeat
Write('Enter the name of the course : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link^.link=Nil) Then
Begin
new(Tail^.link^.link);
Last := Tail^.link^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Repeat
Write('Enter the grade : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link^.link^.link=Nil) Then
Begin
new(Tail^.link^.link^.link);
Last := Tail^.link^.link^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Repeat
Write('Enter the name of the student : ');
Readln(j);
if (j='exit') then break;
if (Tail^.link^.link^.link^.link=Nil) Then
Begin
new(Tail^.link^.link^.link^.link);
Last := Tail^.link^.link^.link^.link;
End
Else
Begin
new(Last^.next);
Last := Last^.next;
End;
Last^.age := j;
Last^.next := Nil;
Until false;
Until false;
Until false;
Until false;
Until false;
writeln;
writeln('...The database has been created successfully!');
searchCourse;
Readln;
End.
程序列表\u数据库;
类型
Node=^T;
T=记录
年龄:弦;
下一步,链接:节点;
结束;
变量
头部、尾部、tmp、最后:节点;
j:弦;
num:整数;
程序和课程;
变量
cmp:整数;
y:字符串;
tmp,tmp2,tmp3:节点;
开始
writeln(“[+]搜索课程”);
write('输入要搜索的课程名称:');
readln(y);
tmp:=水头;
cmp:=0;
如果(tmp^.next=Nil),则
新的(tmp^下一个);
而(tmp^.nextNil)呢?
开始
tmp2:=tmp^.link;
如果(tmp2^.next=Nil),则
新的(tmp2^下一个);
而(tmp2^.nextNil)呢
开始
tmp3:=tmp2^.link;
而(tmp3Nil)呢
开始
如果(tmp3^.age=y),则
开始
writeln(“[”,y,”)可在[”,tmp^.age,“]”的教员中找到,