数据结构中的线性表的初始化操作是什麽?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构中的线性表的初始化操作是什麽?相关的知识,希望对你有一定的参考价值。

  初始化就是建立一个空线性表,那直接把长度置为0就行了。
  1 /* 初始化顺序线性表 */
  2 Status InitList(SqList *L)
  3
  4 L->length=0;
  5 return OK;
  6
  因为要初始化,要对线性表本身进行操作,所以不能用值传递。值传递不会改变实参的值嘛。地址传递的话呢,实际上在函数内部执行了这么一个操作:L = &L. 所以操作函数内部的L,也就相当于操作外部的线性表L。其实地址传递也是值传递。不过这个值是地址而已。
  就是说,需要修改表的就传指针,不需要修改表的传值就行了。那补上一个完整的可运行的程序。
  01 #include "stdio.h"
  02
  03 #define OK 1
  04 #define ERROR 0
  05 #define TRUE 1
  06 #define FALSE 0
  07
  08 #define MAXSIZE 20 /* 存储空间初始分配量 */
  09 typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */
  10 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
  11
  12 typedef struct
  13
  14 ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
  15 int length; /* 线性表当前长度 */
  16 SqList;
  17
  18 /* 初始化顺序线性表 */
  19 Status InitList(SqList *L)
  20
  21 L->length=0;
  22 return OK;
  23
  24
  25 int main()
  26
  27 SqList L;
  28 ElemType e;
  29 Status i;
  30
  31 i=InitList(&L);
  32 printf("初始化L后:L.length=%d\\n",L.length);
  33
  程序运行结果:
  1 初始化L后:L.length=0
  2
  3 Process returned 22 (0x16) execution time : 0.072 s
  4 Press any key to continue.
  有个问题,在函数内部 L->length=0; 使用箭头,而在外面调用的时候 L.length 却用实心点,两者有啥区别吗?
  这个很基础嘛。。。在函数内部,传递的参数是 *L,那么L就是指针。指针需要用->指向成员。而在外部的L是实体对象,实体对象则用实心点来指向成员嘛。
  OK,线性表的初始化就这么简单。
参考技术A Status init_list(CmcLinearList &io_c_l, int listsize/*=LIST_INIT_SIZE*/)
//构造一个空链表,成功返回OK

if (listsize<=0)
listsize = LIST_INIT_SIZE;

io_c_l.elem = (ElemType*)malloc(sizeof(ElemType) * LIST_INIT_SIZE);
if (io_c_l.elem==NULL)
return ERROR;

io_c_l.length = 0;
io_c_l.listsize = listsize;

return OK;


主要是分配对应的空间追问

线性表的定义和初始化有什麽区别啊

追答

定义是指
class CmcLinearList

public:
ElemType *elem; //储存空间基址
int length; //当前长度
int listsize; //当前分配的容量

friend Status operator==(CmcLinearList a, CmcLinearList b);
//重载比较运算符,相等返回TRUE,否则返回FALSE
//注意:不一定是每一位对应相等
;
说明线性表的这种结构体包含什么东西
初始化时针对它的一个实例,进行使用前的分配内存和初始化变量

追问

io_c_l.elem = (ElemType*)malloc(sizeof(ElemType) * LIST_INIT_SIZE);
这句话是什麽意思呢?谢谢

追答

是指为elem指针分配了 以ElemType的大小为单位的 LIST_INIT_SIZE 个内存
malloc()函数是用来分配内存的

追问

非常感谢

本回答被提问者采纳

请各位同仁帮忙看下下面delphi程序代码是什麽意思?

var
tmpList: TStringLiset;
begin
tmpList := TStringList.Create;
if tmpList.Count = 0 then Exit;
tmpList.Free;
end;

貌似你这段代码就是造成了一个内存泄露

tmpList := TStringList.Create; 创建一个TStringList类型的临时变量,
if (tmpList.Count = 0) then Exit; 刚创建时tmpList中没有字符串,tmpList.Count = 0为真,所以函数退出(Exit)
最后一句话tmpList.free得不到执行。所以tmpList这个临时变量没有被释放,它占用的内存就无法释放了。追问

朋友,你好!在嗎?找你幫個忙?

追答

有什么问题?

追问

我在PC上的SQL查詢分析上保存了一個文件,都是不知道什麽 把他放到我當前用的電腦桌面上,你知道什麽操作嗎?哦對了,PC是個數據庫哦 PCanywhere

追答

不好意思,我不太明白你说的意思。没办法帮到你了。

参考技术A 创建TStringList 参考技术B 这个代码的意思是创建一个StringList,然后判断StringList中的数量如果为0的话,则退出。
的确是有内存泄漏,正确的写法应该是这样的:
var
tmpList: TStringList;
begin
tmpList:=TStringList.Create;
try
if tmpList.Count = 0 then Exit;
finally
tmpList.Free;
end;
end;追问

你好,在嗎,現在又時間嗎?幫忙一下
在Private中定义 pnl_right: TPanel 什麽意思呀?什麽定义,请举个例子,谢谢~!

以上是关于数据结构中的线性表的初始化操作是什麽?的主要内容,如果未能解决你的问题,请参考以下文章

在C#中Elapsed是什麽意思?

数据结构:线性表的基本操作

go是什麽情况加es,什麽情况加ing?

数据结构与算法线性表的重要基本操作与代码实现C语言版

exitcode 是什麽意思

Protection是什麽意思?