二、线性表
来源:互联网 发布:lp仿传奇单机版源码 编辑:程序博客网 时间:2024/05/23 11:46
- 序言
- 结构如下
- 插入逻辑
- 图解
- code
- 删除
- 图解
- code
- 链表反转
- 图解
- code
- 函数一览
- 序言
序言
单向链表(单链表)是线性表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。
结构如下
插入逻辑
图解
code
//add to list endbool insert_element_slist(Node *pHead, int pos, ELEMENT data) { Node *tempNode = pHead; if (pHead == NULL) { return false; } if (pos == 1) { //链表没有0位置.要找的是pos-1位置插入.所以pos-1特殊处理 Node *newNode = malloc(sizeof(Node)); newNode->next = tempNode->next; newNode->data = data; tempNode->next = newNode; return true; } tempNode = get_element_slist(tempNode, pos - 1); if (tempNode == NULL) { return false; } Node *newNode = malloc(sizeof(Node)); newNode->data = data; newNode->next = tempNode->next; tempNode->next = newNode; return true;};
删除
图解
code
bool del_element_slist(Node *pHead, int pos, ELEMENT *pData) { if (pHead == NULL) { printf("del_element_slist head is null"); return false; } if (pos == 1) { Node *freeNode = pHead->next; if (freeNode == NULL) { printf("del node is null when pos = 1"); return false; } pHead->next = freeNode->next; *pData = freeNode->data; free(freeNode); freeNode = NULL; return true; } PNode tempNode = pHead; //找pos-1个节点 tempNode = get_element_slist(tempNode, pos - 1); if (tempNode == NULL) { return false; } //转移指针 Node *freeNode = tempNode->next; if (freeNode == NULL) { return false; } tempNode->next = tempNode->next->next; *pData = freeNode->data; //释放 free(freeNode); return true;}
链表反转
图解
反转前
反转后
code
//反转链表 HEAD->A->B->C C->B->A->HEAD此时 C变成HEAD.// HEAD数据不计入链表.原来的HEAD没有数据.此时变成了数据位.Node *reverse_slist(Node *pHead) { if (!pHead) { return NULL; } Node *pNow = pHead; //逻辑的当前节点 Node *pPre = NULL; //逻辑的上一个节点 Node *pNext = NULL;//逻辑的下一个节点 Node *pTail = NULL;//用来保存最后一个反转的尾指针 while (pNow != NULL) { pNext = pNow->next; //得到下一个节点 if (pNext == NULL) { //如果为空.证明pNow是tail pTail = pNow; } pNow->next = pPre; //当前节点指向前一个节点.真正反转的操作.只有这一步.其余的都是循环的赋值 pPre = pNow; //把pNow赋值给pPre.当成普通赋值即可.为了下一次pNow->next = pPre;做准备 pNow = pNext;//当成普通变量赋值.pNext = pNow->next; //循环遍历链表 } pHead->next = NULL; return pTail;};
函数一览
void init_slist(PNode *pHead);bool is_emppy_slist(Node *pHead);bool insert_element_slist(Node *pHead, int pos, ELEMENT data);bool del_element_slist(Node *pHead, int pos, ELEMENT *pData);PNode get_element_slist(PNode pHead, int pos);void clear_slist(Node *pHead);void destroy_slist(Node *pHead);int get_length_slist(Node *pHead);void print_slist(Node *pHead);Node *reverse_slist(Node *pHead);Node *reverse_slist_plus(Node *pHead);
引用:
http://blog.csdn.net/xyh269/article/details/70238501
http://www.cnblogs.com/QG-whz/p/5170147.html
code地址:
https://github.com/HumorSmith/DataStructure/tree/master/link_list
0 0
- 线性表基础知识(二)
- 线性表(二)
- 线性表(二)
- 线性表(二)
- 线性表习题二
- 专题二-线性表
- 二、线性表
- (二)线性表
- 线性表(二)
- 线性结构------线性表(二)
- 数据结构(二)--线性表
- 实验二:线性表实验
- 实验二:线性表实验
- 数据结构实验二------线性表
- 实验二:线性表实验
- 实验二线性表实验
- 实验二 线性表实验
- 实验二之线性表
- (转)巴菲特的投资智慧--1998年的演讲
- db2look导出数据库表结构用法
- Chapter9——构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数?
- 第一条博客
- shell+curl监控网站页面(域名访问状态),并利用sedemail发送邮件
- 二、线性表
- 【GDOI2017 day2】凡喵识图
- Vue.js 2.0从入门到放弃---入门实例(二)
- static和final
- 练习题 No.8 完全背包问题
- Maven私服的使用
- Vue.js2.0从入门到放弃---入门实例(三)
- 学习淘淘商城第五十六课(ActiveMQ发送queue消息)
- dao--1.jdbc