请教数据结构链表类型的定义

dghh159 2008-08-28 10:43:38
《数据结构》原书 P48 是这样定义链表结构的:

// (2)定义链表结点类型
typedef struct LNode{
ElemType data; // 数据域
struct LNode* next; // 指针域
}*Link, *Position;

// 定义链表类型
typedef struct{ // 链表类型
Link head, tail; // 分别指向线性表中的头结点和最后一个结点
int length; //指示线性链表中数据元素的个数
}LinkList;


这样LinkList是一个普通结构体类型,这样做很不方便啊。
比如创建一个空表,如果传递结构体类型参数,就会创建失败。
// (3)构造一个空的线性表L
int InitList(LinkList* L)
{
L = (LinkList*)malloc(sizeof(LinkList));
L->head=NULL;
L->tail=NULL;
L->length=0;

return OK;
}


调用方式
int main()
{
Linklist lkt;
InitList(&lkt);// 调用后lkt还是空的。
}


可行的方法有2种:
(1)将链表结构类型定义为 *LinkList
typedef struct{ // 链表类型
//...
}*LinkList; [/code]

(2)运用双指针参数
int  InitList(LinkList** L) 
{
//...
}

int main()
{
Linklist* lkt;
InitList(&lkt);
}


我现在想请教下原书定义为普通结构体类型的Linklist,而不是指针类型的*Linklist,有什么好处吗?
...全文
358 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dghh159 2008-08-29
  • 打赏
  • 举报
回复
恩,理解起来不麻烦,实现起来就有点恼人了。

尤其像我这样的菜菜鸟。
_石头_ 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 dghh159 的帖子:]
我现在想请教下原书定义为普通结构体类型的Linklist,而不是指针类型的*Linklist,有什么好处吗?
[/Quote]
没什么区别,估计作者这么做的意图是想让读者吧主要精力放在数据结构上。毕竟Linklist *从外观上就能知道它是一个指针,尽量适应对指针不是很熟悉的读者。----估计是这样吧!呵呵!
wangdeqie 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dghh159 的回复:]
那定义为*Linklist不是更好么?我弄了半个晚上才发现原来是这里出了问题。
[/Quote]
书上写的没楼主想得周全,领会其精神即可
wangdeqie 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dghh159 的回复:]
那定义为*Linklist不是更好么?我弄了半个晚上才发现原来是这里出了问题。
[/Quote]
偶写C链表时,LinkList* InitList()习惯这么写,便于链式表达式的操作
dghh159 2008-08-28
  • 打赏
  • 举报
回复
那定义为*Linklist不是更好么?我弄了半个晚上才发现原来是这里出了问题。
wangdeqie 2008-08-28
  • 打赏
  • 举报
回复
一种习惯而已,其实楼主和书写的是一样,

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧