链表思考

链表的句柄指针都是“喜新厌旧”!!

1、“左增长型”:将句柄指向的内容挂在新分配内存的next上,而自己又去指向新的内存!永远都是指向“新来的”、“后进的”。

2、“右增长型”:将新分配内存挂在句柄指向的内容的next上,而自己又去指向新的内存!永远都是指向“新来的”、“后进的”。

不管怎么样,句柄都是永远指向“新来的”内存空间的。

原因是:

若句柄是指向最老的内存,每次添加新内存都需要从最老的内存移动到最后挂上链表的内存,然后将最新分配的内存再挂上去,

很麻烦且效率低下,所以句柄指向最后的内存,每次有新内存来直接挂上去就是了。

typedef struct _EmberAfPluginLinkedListElement {
  struct _EmberAfPluginLinkedListElement* next;
  struct _EmberAfPluginLinkedListElement* previous;
  void* content;
} EmberAfPluginLinkedListElement;
//上面这个结构体就是双向链表了,下面这个结构体是給链表做个监控的指针,便于好操作链表
typedef struct {
  EmberAfPluginLinkedListElement* head;
  EmberAfPluginLinkedListElement* tail;
  uint32_t count;
} EmberAfPluginLinkedList;

链表如何做到“先进先出”?

比如双向链表的句柄是*Dlist,这个Dlist每次都是指向新分配的node内存,想做到像队列那样的“先进先出”每次都得遍历两遍,

1、当需要存入链表就需要遍历到链表尾部添加,

2、当取的时候就需要遍历到链表头部取。

效率低下!

 

解决办法就是一个双向链表做两个指针句柄,一个指向链表的头,一个指向链表的尾部

指向尾部的句柄进行“右增长”。当有新内存来就将新内存指向自己的next,然后自己又指向新的内存。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习【数据结构课程】中线性表知识,自己动手做的【学生信息 管理 系统】。 目的:重在功能实现,思考探索。 编程语言:C IDE:VC++6.0 基础功能:增、删、查、改。 【扩展功能: 1.数据的保存、读取; 2.账号的登入、登出; 3.对数据敏感操作的日志记录; 4.对查询结果的简单数量统计。】 缺陷:没有排序功能,统计能不够强大,对非法或刁难的数据处理效果微弱。 (感兴趣的朋友可以试着填补上述缺陷) 【水平有限,代码仅作参考。 有不足之处,还望指出,非常感谢。】 附录: 1.学生信息 类型: typedef struct { char id[11]; /*学号,12入学年份,34学院,56专业,78班级,90班内号数*/ char name[11]; /*姓名,仅考虑由字母组成的名字*/ int sex; /*性别,男1,女0*/ char headTeacher[11]; /*班主任*/ int entranceScore; /*入学成绩*/ char birthday[9]; /*xxxx年xx月xx日*/ char Tel[12]; /*联系电话,11位*/ char homeAddress[21]; /*家庭地址*/ } stuData; 2.文件目录: head.c linklist.c linkqueue.c list.txt log.c logData.txt login.c main.c stu.c stuData.txt user.c userData.txt 基础:C语言知识,特别强调:指针和链表的知识.txt 学生信息系统_流程图_粗糙.png 提示:阅读代码可以从head.c或main.c开始;运行程序从main.c开始,登陆账号在userData.txt中设置.txt 效果图1_登陆账号.png 效果图2_登陆账号2.png 效果图3_功能选择.png 效果图4_浏览学生信息.png 效果图5_查询学生信息.png 效果图6_退出查询学生信息.png 效果图7_退出账号.png 效果图8_退出系统.png 【完毕】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值