设计一个算法,将X插入到一个有序(从小到大排序)的线性表(顺序存储结构)的适当位置上,以保持线性表的有序性
1个回答
展开全部
本人是学Pascal的,如果看不懂的话就写个伪代码给你:
插入过程(t待插入数,head头指针)
1.t<head.data 即t比head的值小
将t插在Head前,并将head指向t
2.否则
在链表中顺序查找一个p
使得p.next.data>t,即p的下一个节点的值比t大
将t插在p后面
过程结束
源代码:
type lnk=^node;
node=record
data:Longint;
next:lnk;
end;
var n,i,t:longint;
root:lnk;
procedure insert(t:longint);
var p,q:lnk;
begin
if root=nil then
begin
new(root);
root^.data:=t; root^.next:=nil;
end
else if root^.data>t then
begin
new(p); p^.data:=t; p^.next:=root;
root:=p;
end
else
begin
p:=root;
while (p^.next<>nil) and (p^.next^.data<t) do
p:=p^.next;
new(q); q^.data:=t; q^.next:=p^.next;
p^.next:=q;
end;
end;
procedure print;
var p:root;
begin
p:=root;
while p<>nil do
begin
write(p^.data,' ');
p:=p^.next;
end;
writeln;
end;
begin {main}
readln(n);
root:=nil;
for i:=1 to n do
begin
read(t);
insert(t);
end;
print;
end.
插入过程(t待插入数,head头指针)
1.t<head.data 即t比head的值小
将t插在Head前,并将head指向t
2.否则
在链表中顺序查找一个p
使得p.next.data>t,即p的下一个节点的值比t大
将t插在p后面
过程结束
源代码:
type lnk=^node;
node=record
data:Longint;
next:lnk;
end;
var n,i,t:longint;
root:lnk;
procedure insert(t:longint);
var p,q:lnk;
begin
if root=nil then
begin
new(root);
root^.data:=t; root^.next:=nil;
end
else if root^.data>t then
begin
new(p); p^.data:=t; p^.next:=root;
root:=p;
end
else
begin
p:=root;
while (p^.next<>nil) and (p^.next^.data<t) do
p:=p^.next;
new(q); q^.data:=t; q^.next:=p^.next;
p^.next:=q;
end;
end;
procedure print;
var p:root;
begin
p:=root;
while p<>nil do
begin
write(p^.data,' ');
p:=p^.next;
end;
writeln;
end;
begin {main}
readln(n);
root:=nil;
for i:=1 to n do
begin
read(t);
insert(t);
end;
print;
end.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |