C实现头插法和尾插法来构建双向非循环链表(带头结点尾结点)
来源:互联网 发布:linux系统下计算pi的值 编辑:程序博客网 时间:2024/05/16 18:55
双向链表中如果有了头结点和尾结点,对于头插法和尾插法就显得非常方便。这样在尾部插入一个元素也就不用去遍历链表了。个人建议使用这种链表来处理问题。代码上传至 https://github.com/chenyufeng1991/HeadInsertAndTailInsert_DoubleList_HeadList 。
核心代码如下:
//创建带头结点和尾结点的双向非循环链表(头插法)void HeadInsertCreateList(Node *pHead,Node *pTail){ Node *pInsert; pInsert = (Node *)malloc(sizeof(Node)); memset(pInsert, 0, sizeof(Node)); pInsert->prior = NULL; pInsert->next = NULL; scanf("%d",&(pInsert->element)); while (pInsert->element > 0) { pHead->next->prior = pInsert; pInsert->next = pHead->next; pInsert->prior = pHead; pHead->next = pInsert; pInsert = (Node *)malloc(sizeof(Node)); memset(pInsert, 0, sizeof(Node)); pInsert->prior = NULL; pInsert->next = NULL; scanf("%d",&(pInsert->element)); } printf("%s函数执行完成,头插法建立带头节点和尾结点的双向非循环链表创建成功\n",__FUNCTION__);}//创建带头结点和尾结点的双向非循环链表(尾插法)void TailInsertCreateList(Node *pHead,Node *pTail){ Node *pInsert; pInsert = (Node *)malloc(sizeof(Node)); memset(pInsert, 0, sizeof(Node)); pInsert->prior = NULL; pInsert->next = NULL; scanf("%d",&(pInsert->element)); while (pInsert->element > 0) { pTail->prior->next = pInsert; pInsert->prior = pTail->prior; pInsert->next = pTail; pTail->prior = pInsert; pInsert = (Node *)malloc(sizeof(Node)); memset(pInsert, 0, sizeof(Node)); pInsert->prior = NULL; pInsert->next = NULL; scanf("%d",&(pInsert->element)); } printf("%s函数执行完成,尾插法建立带头节点和尾结点的双向非循环链表创建成功\n",__FUNCTION__);}
测试代码如下:
int main(int argc, const char * argv[]) { Node *pHead;//头结点 Node *pTail;//尾结点 InitialList(&pHead, &pTail); HeadInsertCreateList(pHead, pTail); PrintList(pHead, pTail); TailInsertCreateList(pHead, pTail); PrintList(pHead, pTail); return 0;}
1 0
- C实现头插法和尾插法来构建双向非循环链表(带头结点尾结点)
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- C语言实现双向非循环链表(带头结点尾结点)的节点插入
- C实现头插法和尾插法来构建非循环双链表(不带头结点)
- C语言实现双向非循环链表(不带头结点)的基本操作
- C语言实现双向非循环链表(不带头结点)的逆序打印
- C语言实现双向非循环链表(不带头结点)的节点插入
- C语言实现双向非循环链表(不带头结点)的清空
- 经典算法学习——非循环双向链表实现冒泡排序(带头结点尾结点)
- C实现头插法和尾插法来构建单链表(带头结点)
- 双向循环链表(带头结点)
- C语言实现非循环双链表节点的删除(带头结点尾结点)
- 带头结点的双向循环链表
- 带头结点的双向循环链表
- 带头结点的双向循环链表
- 线性表和带头结点的双向循环链表
- 经典算法学习——非循环双向链表实现冒泡排序(不带头结点)
- C实现头插法和尾插法来构建单链表(不带头结点)
- 性能优化(一)Hibernate 利用缓存(一级、二级、查询)提高系统性能
- 每个程序员应该阅读的10本经典书籍
- 学习OpenCV(2)双目测距原理
- JavaScript Number() 函数
- Cocoapod安装
- C实现头插法和尾插法来构建双向非循环链表(带头结点尾结点)
- 企业版IDP的申请及“In House”发布
- 基于DLNA实现iOS,Android投屏:SSDP发现设备
- patchca整合Spring MVC生成超炫的验证码
- 【PA2015】【BZOJ4297】Rozstaw szyn
- 从Hadoop到Spark的架构实践
- 自定义开关
- iOS 3D Touch 简述
- Android中数据存储的5种方法