记录??(120分)

  • 主题发起人 主题发起人 yucy
  • 开始时间 开始时间
Y

yucy

Unregistered / Unconfirmed
GUEST, unregistred user!
不用数据库有什么好方法可以实现在数组中频繁追加记录、删除记录,可造成该数组保存
不了设计要求的记录数。
例如:定义一个数组型10条,当已经保存了9条记录,如果删除第2、3、6、8号记录,只能
再追加1条记录,而一共可保存6条记录,已经到了记录的尾部。我想请问高手有什么好方
法可保证记录10条记录,而不浪费空记录。[本人用方法太烦琐、也太笨]
unit variable;
interface
type Tcode_object = record
id :integer;
Content :string;
end;
var
my_object : array[1..100] of Tcode_object;

 
用链表呗,干嘛要用数组呀
 
可以用链表,就不会浪费空间。
unit variable;
interface
type
pCode_Object = ^TCode_Object;

Tcode_object = record
id :integer;
Content :string;
end;
var
my_Object : TList;
 
能否说的再细一些,如何使用链表。
例如:我已经有了几条记录,如何保证我再插入记录时不是追加记录,而是插入在我删除
记录的位置上?请给出一个例子好吗?
 
用TList吧,它已经封装了链表的所有操作,很方便的,具体的属性、方法看看帮助
就行了。
 
一个例子:
procedure TForm1.FormButton1Click(Sender: TObject);
type
PMyList = ^AList;
AList = record
I: Integer;
C: Char;
end;

var
MyList: TList;
ARecord: PMyList;
B: Byte;
Y: Word;
begin
MyList := TList.Create;
New(ARecord);
ARecord^.I := 100;
ARecord^.C := 'Z';
MyList.Add(ARecord);
{Add integer 100 and character Z to list}
New(ARecord);
ARecord^.I := 200;
ARecord^.C := 'X';
MyList.Add(ARecord);
{Add integer 200 and character X to list}
{ Now paint the items onto the paintbox )
Y := 10;
{Variable used in TextOut function}
for B := 0 to (MyList.Count - 1)do

begin
ARecord := MyList.Items;
Canvas.TextOut(10, Y, IntToStr(ARecord^.I));
{Display I}
Y := Y + 30;
{Increment Y Value again}
Canvas.TextOut(10, Y, ARecord^.C);
{Display C}
Y := Y + 30;
{Increment Y Value}
end;

{ Cleanup: must free the list items as well as the list }
for B := 0 to (MyList.Count - 1)do
begin
ARecord := MyList.Items;
Dispose(ARecord);
end;

MyList.Free;
end;
 
当前记录位置i(要在该位置插入记录)总记录数为100
if i<100 then
for j:=99do
wnto ido
myobject[j+1]:=myobject[j];
myobject:=xxx;
删除记录,位置i
if i<100 then
for j:=i to 99do
myobject[j]:=myobject[j+1];
myobject[100]:=一个空记录。//你必须肯定有100条记录,如果没有就必须将99和100分别
用总记录数-1和总记录数代替。
增加记录:
myobject[总记录数+1]:=xxx(条件是总记录数小于100)。
这种方法是很麻烦的,如果你的操作比较频繁的话将会在搬移记录上花费很多时间!
 
多人接受答案了。
 
后退
顶部