【资源】线性链表数组单元
pascal吧
全部回复
仅看楼主
level 9
ax_pokl 楼主

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
ax_pokl 楼主
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
ax_pokl 楼主
过程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
ax_pokl 楼主
 _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
ax_pokl 楼主
  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
ax_pokl 楼主
  _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
ax_pokl 楼主
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
ax_pokl 楼主
 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
ax_pokl 楼主
_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
level 12
这资源很好,就是太难懂了[顶]
2013年01月01日 08点01分 10
怎么难懂了?。
2013年01月01日 15点01分
1