level 9
unit ARRNODE;
interface
const _sget='Wrong aay GET Number!';
_sset='Wrongaay SET Number!';
_sadd='Wrongaay ADD Number!';
_sdel='Wrongaay DEL Number!';
_scut='Wrongaay CUT Number!';
_cn=0.0;
_cf=-1.0;
type _a=^_nod;
_nod=record
_data:real;
_next:_a;
end;
var _i:integer;
_p,_q:_a;
type arr=_a;
function acrea(_n:integer):_a;
function alen(_h:_a):integer;
function aget(_h:_a;_n:integer):real;
procedure aclr(_h:_a);
procedure aset(_h:_a;_n:integer;_d:real);
procedure ains(_h:_a;_n:integer;_d:real);
procedure adel(_h:_a;_n:integer);
2012年12月24日 23点12分
1
level 9
procedure adelall(_h:_a);
procedure acon(_h1,_h2:_a);
procedure acut(_h1,_h2:_a;_n:integer);
procedure ain(_h:_a);
procedure aout(_h:_a);
{
线性链表数组
【说明】
1、请使用arr或_a类型定义数组。
2、请勿使用下划线开始的变量、常量、类型。
3、数组大小是有限的。超过16384个数据(大于64K内存)会导致地址溢出。
【函数/过程】
下面给出所有函数/过程的名称及适用范围:
函数acrea: 创建数组 (数组长度:整型):数组:_a; 1<=n
函数alen: 获取数组长度 (数组:_a):数组长度:整型;
函数aget: 读取元素 (数组:_a;元素位置:整型):元素内容:实型;
过程aclr: 数组清零 (数组:_a);
过程aset: 设置元素 (数组:_a;元素位置:整型,元素内容:实型); 1<=n<=长度
2012年12月24日 23点12分
2
level 9
过程ains: 插入元素 (数组:_a;元素位置:整型,元素内容:实型); 1<=n<=长度+1
过程adel: 删除元素 (数组:_a;元素位置:整型); 1<=n<=长度
过程adelall: 删除数组 (数组:_a);
过程acon: 合并数组 (数组1:_a,数组2:_a); (数组2清零)
过程acut: 拆分数组 (数组1:_a,数组2:_a;剪切位置:整型); 0<=n<=长度 (从左至右剪切,贴入数组2)
过程ain: 批量写入元素 (数组:_a);
过程aout: 批量输出元素 (数组:_a);
如果数组长度为-1,则该数组已经被删除,需要重新创建。请在使用数组之前务必先创建数组!
}
implementation
function acrea(_n:integer):_a;
begin
if _n<1 then
begin
new(_q);
_q^._data:=_cf;
2012年12月24日 23点12分
3
level 9
_q^._next:=_q;
acrea:=_q;
end
else
for _i:=1 to_n do
if _i=1 then
begin
new(_q);
_q^._data:=_cn;
_p:=_q;
acrea:=_q;
end
else
begin
new(_q);
_q^._data:=_cn;
_p^._next:=_q;
_p:=_p^._next;
_p^._next:=NIL;
end;
end;
function alen(_h:_a):integer;
begin
_i:=1;
_p:=_h;
if _p^._next=_p then _i:=-1
else
while_p^._next<>NIL do
begin
_i:=_i+1;
_p:=_p^._next;
end;
alen:=_i;
end;
function aget(_h:_a;_n:integer):real;
begin
if (_n<=alen(_h)) and (_n>0) then
if _n=1 then
aget:=_h^._data
else
2012年12月24日 23点12分
4
level 9
begin
_p:=_h;
for _i:=2 to_n do _p:=_p^._next;
aget:=_p^._data;
end
else writeln(_sget);
end;
procedure aset(_h:_a;_n:integer;_d:real);
begin
if (_n<=alen(_h)) and (_n>0) then
begin
_p:=_h;
if _n>1then
for _i:=2 to_n do _p:=_p^._next;
_p^._data:=_d;
end
else writeln(_sset);
end;
procedure ains(_h:_a;_n:integer;_d:real);
begin
new(_q);
if (_n<=(alen(_h)+1)) and (_n>0) then
begin
_p:=_h;
if _n=1 then
begin
_q^._data:=_h^._data;
_q^._next:=_h^._next;
_h^._data:=_d;
_h^._next:=_q;
end
else
begin
if _n>2then
for _i:=3to _n do _p:=_p^._next;
2012年12月24日 23点12分
5
level 9
_q^._data:=_d;
_q^._next:=_p^._next;
_p^._next:=_q;
end;
end
else
writeln(_sadd);
end;
procedure adel(_h:_a;_n:integer);
begin
if (_n<=alen(_h)) and (_n>0) then
if _n=1 then
if_h^._next<>NIL then
begin
_q:=_h^._next;
_h^._next:=_q^._next;
_h^._data:=_q^._data;
dispose(_q);
end
else
begin
_h^._next:=_h;
_h^._data:=_cf;
end
else
begin
_p:=_h;
for _i:=2 to_n do begin _q:=_p;_p:=_p^._next;end;
_q^._next:=_p^._next;
dispose(_p);
end
else
writeln(_sdel);
end;
procedure adelall(_h:_a);
2012年12月24日 23点12分
6
level 9
begin
_q:=_h^._next;
if _h^._next<>_h then
while_q<>NIL do
begin
_p:=_q;
_q:=_q^._next;
dispose(_p);
end;
_h^._next:=_h;
_h^._data:=_cf;
end;
procedure acon(_h1,_h2:_a);
begin
if _h2^._next<>_h2 then
begin
_p:=_h1;
if_p^._next<>_h1 then
begin
while_p^._next<>NIL do
_p:=_p^._next;
new(_q);
_q^._data:=_h2^._data;
_q^._next:=_h2^._next;
_p^._next:=_q;
end
else
begin
_p^._next:=_h2^._next;
_p^._data:=_h2^._data;
end;
_h2^._next:=_h2;
_h2^._data:=_cf;
end;
end;
procedure acut(_h1,_h2:_a;_n:integer);
begin
if (_n<=alen(_h1)) and (_n>=0) then
2012年12月24日 23点12分
7
level 9
begin
adelall(_h2);
_h2^._next:=_h1^._next;
_h2^._data:=_h1^._data;
_q:=_h1;
for _i:=2 to_n do _q:=_q^._next;
if _n>0then
if_q^._next<>NIL then
begin
if _n=1then
begin
_h2^._data:=_q^._data;
_h2^._next:=NIL;
end;
_h1^._data:=_q^._next^._data;
_h1^._next:=_q^._next^._next;
if _n>1then _q^._next:=Nil
end
else
begin
_h1^._next:=_h1;
_h1^._data:=_cf;
end
else
begin
_h2^._next:=_h2;
_h2^._data:=_cf;
end
end
else
writeln(_scut);
end;
procedure ain(_h:_a);
begin
_p:=_h;
read(_i);
2012年12月24日 23点12分
8
level 9
_p^._data:=_i;
if _p^._next<>_p then
while_p^._next<>NIL do
begin
_p:=_p^._next;
read(_i);
_p^._data:=_i;
end;
end;
procedure aclr(_h:_a);
begin
_h^._data:=_cn;
_p:=_h;
if _p^._next<>_p then
while_p^._next<>NIL do
begin
_p:=_p^._next;
_p^._data:=_cn;
end;
end;
procedure aout(_h:_a);
begin
_p:=_h;
write(_p^._data);
if _p^._next<>_p then
while_p^._next<>NIL do
begin
_p:=_p^._next;
write(_p^._data);
end;
writeln;
end;
END.
2012年12月24日 23点12分
9