C语言实现一个容器

lostxiaoq 2011-05-09 04:18:05
1. 试用C语言实现一个容器,可以装字符串、字符、数字、二进制数据, 其中每一个被装进的数据要附带一个唯一识别码。
int put_char(List *list, unsigned int uid, char c);
int put_string(List *list, unsigned int uid, char *str);
int put_integer(List *list, unsigned int uid, int num);
int put_binary(List *list, unsigned int uid, unsigned char* data, unsigned int data_len);
说明:主要考核是C语言结构体和链表指针方面的基础知识,请不要用C++的map、vector等已经做好的容器来实现。
2. 能遍历容器内有多少个数据节点,根据uid删除节点,打印节点。
Unsigned int getNodeNum(List *list);
Int delete_node(List *list, unsigned int uid);
Int print_node(List *list, unsigned int uid);
Void delete_all_nodes(List *list);

题目陈述如上。
如果用链表来实现的话,不同存储类型的结构是不一样的,比如存储字符的节点和存储二进制数据的节点的结构是不一样的。这样的话链接的指针类型就无法定义。请问板上高手有什么解决方法?
...全文
387 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
syai 2011-05-09
  • 打赏
  • 举报
回复
啊一直以为只有像c++那样的用模板来做容器,又学了一招!!谢啦!
qq120848369 2011-05-09
  • 打赏
  • 举报
回复
一律用void*,一律用memcpy,一律带上size
飞天御剑流 2011-05-09
  • 打赏
  • 举报
回复
哦,重新看了下题目,原来是每个节点的数据类型都可能不同。

那么就把标记写在节点结构中吧,这样就知道是哪种类型的数据了。
飞天御剑流 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lostxiaoq 的回复:]
用无类型指针还是有问题的,无类型指针虽然可以指向一个节点,但是用这个指针必须转换为节点类型的的指针才能访问该节点的内容。而在遍历的时候是不知道无类型指针指向的节点类型。
[/Quote]

你又想错了,链表每个节点的数据都是相同类型的,只需要在链表的管理节点处标记这个链表属于哪种类型的链表就行了。
lostxiaoq 2011-05-09
  • 打赏
  • 举报
回复
用无类型指针还是有问题的,无类型指针虽然可以指向一个节点,但是用这个指针必须转换为节点类型的的指针才能访问该节点的内容。而在遍历的时候是不知道无类型指针指向的节点类型。
子达如何 2011-05-09
  • 打赏
  • 举报
回复
挺麻烦的,C++就简单很多。找一下一个叫tinySAK的项目,貌似用C实现了一些类似OO概念的东西,里面一个tsk_list.h就很像LZ描述的特性。
张小毛 2011-05-09
  • 打赏
  • 举报
回复
哈哈,
bdmh 2011-05-09
  • 打赏
  • 举报
回复
用无类型指针
lostxiaoq 2011-05-09
  • 打赏
  • 举报
回复
ls说得很有道理,之前我思维定势了,以前学的时候都是同一类型节点的链表。
飞天御剑流 2011-05-09
  • 打赏
  • 举报
回复
不同数据类型设置不同的结构,在每个节点中设置一个void*指针引用每个节点的数据。

69,381

社区成员

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

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