线性表-链表(一)
来源:互联网 发布:唱歌挣钱的软件 编辑:程序博客网 时间:2024/05/13 12:18
一,定义
什么是单链表呢?
单链表是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点都包含指向下一个节点的链接,也就是指针
单链表的特点是什么呢?
- 数据元素在 逻辑关系上相邻 ,用指针表示
- 单链表 中访问数据元素时需从头开始,即顺序访问
- 比顺序表的优势在于,提供高效的重排数据项的能力
C代码:
typedef struct LNode {
ElemType data;
struct LNode *next;
}LNode, *LinkList;
其中 data 是数据域 *next是指针域
用指针表示链接,用结构体表示结点,结点是由数据项和链接组成的,链接是指向下一个结点的指针
注意:头指针指向单链表中的第一个结点
单链表有哪些基本形态呢?
(1)空表
即链表L中没有元素 L->next == NULL;
(2)非空表
即L链表中有元素
注意:当链表为空时,不允许链表进行删除操作。当链表非空是可以进行插入,删除操作。
二,单链表的基本操作
(1)单链表如何初始化呢?
Stutas InitList(LinkList &L) {
L = (LinkList)malloc(sizeof(LNode));
if(!L)
exit(overflow);
L->next=NULL;
return OK;
}
其中L是链表的头结点 & 是取地址符,相当于获取L的地址
(2)取出链表中的某个元素的操作
分析:
单链表是一种 顺序访问 的结构,为找到第i个数据元素,必须先找到第(i-1)个数据元素。我们可以定义一个指针p,int型 i , j=0 让指针p始终指向单链表中第j个节点。移动指针,比较 j 和 i 若等到 j 和 i 相等的时候,就找到我们需要的元素。 (其实,就是让你的指针p指向链表中的第 j 个位置,从此位置依次向后查找 直到查到 为止)
代码如下:
Status GetElem_L(LinkList L, int i, ElemType &e){ p = L->next; j = 1; while(p && j<i){ p=p->next; j++; } //第i个元素不存在 if(!p || j>i){ return ERROR; } e = p->data; return OK; }
此代码中L是带头结点的头指针,用 e 返回第 i 个元素的值,p指向第一个结点 j 为计数器 。通过while循环 顺着指针向后查找,直到 p 指向第 i 个元素 或 p指向 NULL(即链表中没有第 i 个元素)
- 线性表-链表(一)
- 线性表 (一)
- 线性表(一)
- 线性表(一)
- 线性表(一)
- (一)线性表
- 线性表(一)
- 线性表(一)
- 线性结构------线性表(一)
- 顺序线性表(一)
- 数据结构(一)---线性表
- 线性表(List) 一
- 数据结构(一)线性表
- [数据结构]线性表(一)
- 【数据结构】线性表(一)
- 数据结构学习笔记(一)---------线性表线性存储
- 数据结构【线性表(二)链表】项目一--建立单链表
- (一)线性表、单向链表
- How to Get iWork for Free on Older Macs
- UVA11174vector实现树的搜索和使用逆元求a/b%n
- WIFI DIRECT开发(三)P2P传输技术-WIFI Direct
- hdu 5098 Smart Software Installer 拓扑排序or记忆化搜索
- sql学习笔记4:多表查询
- 线性表-链表(一)
- 《c++编程》第3章第38题
- csuoj 2015.3.15
- 使用JDBC处理MySQL大数据(三)
- windows安装TortoiseGit详细使用教程【基础篇】
- M5-mips交叉编译环境搭建
- php 之 cookie 和 session 简单解读
- 第8周项目3(2)分数类的运算符重载(拓展)
- Android官方开发文档地址