单链表的操作(cpp)
来源:互联网 发布:c语言temp是什么意思 编辑:程序博客网 时间:2024/05/22 15:34
单链表是链表中最为简单的操作,也是基础操作,接下来,我就简单讲讲单向链表的操作。先声明一个链表
typedef struct LNode {
ElemType data;
struct LNode *next;
}LinkNode;
因为链表起初可以当作默认为空,因此,先要创建一个头结点,同时,设置首结点为空(ps:注意头结点与首结点的区别),比如我创建了一个L的链表,L->head就是头结点,L->next就是一个首结点
/*判断链表是否为空*/bool ListEmpty(LinkNode *L) { //判断链表是否为空,只要判断链表的节点是否为空 return (L->next == NULL);}
需要了解链表长度可以设置一个变量count设置为0,然后遍历链表,每遍历一次count++,遍历结束就得到了链表的长度
void ListLength(LinkNode *L) { int count = 0; LinkNode *p = L; while (p->next != NULL) { count++; p = p->next; } printf("\n";}
查询一个元素的时候也是同理,遍历一个链表,找到相应元素就返回true.
/*该函数作用的是查找该元素是否存在*/bool GetElem(LinkNode *L, int i, ElemType &e) { //i个结点 int j = 0; LinkNode *p = L;//指向头结点 if (i <= 0) return false; while (j < i && p != NULL) { j++; p = p->next; } if (p == NULL) { return false; }else { e=p->data; return true; }}
插入元素和删除元素是链表中最为重要的操作。
插入元素:依旧是需要遍历链表,我们需要遍历到第i-1个位置(数组下标从0开始),将首结点向后移一个位置,这时候将s的结点放到首结点的位置,就完成了插入操作
bool ListInsert(LinkNode *&L, int i, ElemType e) { int j = 0; LinkNode *p = L, *s; if (i < 0) return false; while (j < i - 1 && p != NULL) { j++; p = p->next; } if (p == NULL) return false; else { s = (LinkNode *)malloc(sizeof(LinkNode)); s->data = e; s->next = p->next; p->next = s; return true; }}
删除链表结点:只需要绕过所要删除的结点,直接将指针
向首结点的下一个结点。
/*删除链表结点*/bool ListDelete(LinkNode * &L, int i, ElemType &e) { int j = 0; LinkNode *p = L, *q; if (i <= 0) return false; while (j < i - 1 & *& p != NULL) { j++; p = p->next; } if (p == NULL) return false; else { q = p->next; if (q == NULL) return false; e = q->data; p->next = q->next; free(q); return true; }}
销毁链表:遍历每个结点的同时释放每个结点的内存
void DestroyList(LinkNode *&L) { LinkNode *pre = L, *p = L->next; while (p != NULL) { //逐步遍历链表 free(pre); //释放每个链表结点的内存 pre = p; //释放当前结点之后,将指针指向下一个结点 p = pre->next; } free(pre);}
阅读全文
0 0
- 单链表的操作(cpp)
- cpp 的 string 操作
- json cpp 的简单操作
- CPP(八):bitset的实现与位操作
- mfc操作excel(excel.CPP)
- zmq源码阅读——Msg.hpp & Msg.cpp 的 相关操作 (zmq中的消息)
- main1-1.cpp 检验基本操作bo1-1.cpp的主函数
- f0305.cpp 字符串操作
- cpp 操作文件
- CPP操作符重载
- 【链表操作】奶牛的比赛 contest.pas/c/cpp
- bo2-2.cpp 带有头结点的单链表(存储结构由c2-2.h定义)的基本操作(12个)
- CPP(三)理解操作符重载:初步
- CPP(四)理解操作符重载:进阶
- CPP(五)理解操作符重载:应用
- 第二题 用域操作符更改全局变量的值(注,此方法只能用在.cpp中)
- cpp 模拟栈(数组的方式)
- CPP实现队列,(数组的方式)
- javascript创建对象的几种常用模式
- java基础第二天
- LeetCode——520. Detect Capital
- [3]118. Pascal's Triangle(Java)
- CentOS6.9安装jdk1.7.0.45步骤
- 单链表的操作(cpp)
- 【测序平台】-CP0003-illunima中国总部-02-实验室
- Python 不定长函数 (函数可变参数个数)
- vue设置webpack文件别名+配置路由的默认class
- PAT段错误记录
- vs2013版本中 App_Code文件夹下类的调用问题
- 简单http和https服务器python脚本
- 基本排序方法归纳整理(二):插入排序
- 面试问题架构师有哪些职责