数据结构基础【03】单链表
来源:互联网 发布:淘宝换购拍下 编辑:程序博客网 时间:2024/06/03 15:41
单链表
定义:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)
实现
基本操作
初始化 InitList
销毁 DestroyList
清空 ClearList
判断是否为空 ListEmpty
元素个数 ListLength
取出元素 GetElem
查找 LocateElem
插入元素 ListInsert
删除元素 ListDelete
前插法创建 CreateList_H
后插法创建 CreateList_R
遍历元素 TraverseList
单链表的具体实现(带头结点)
存储结构定义
#define MAXSIZE 100 //顺序表可能达到的最大长度#define OK 1#define ERROR 0#define OVERFLOW -2//结构定义typedef struct LNode{ int data; //数据域 struct LNode *next; //节点的指针域} LNode, *LinkList;
初始化
int InitList(LinkList &L){ //构造空的单链表 L = new LNode; L->next = NULL; return OK;}
销毁
int DestroyList(LinkList &L){ LinkList q; while (L) { q = L->next; delete L; L = q; } return OK;}
清空
int ClearList(LinkList L){ LinkList p, q; p = L->next; while (p) { q = p->next; delete p; p = q; } L->next = NULL; return OK;}
判断是否为空
bool ListEmpty(LinkList L){ if (L->next = NULL) return true; return false;}
元素个数
int ListLength(LinkList L){ int i = 0; while (L) { i++; L = L->next; } return i;}
取出元素
int GetELem(LinkList L, int i, int &e){ LinkList p; int j; p = L->next; j = 1; while (p && j < i) { p = p->next; j++; } if (!p || j > i) return ERROR; e = p->data; return OK;}
查找
LNode *LocateElem(LinkList L, int e){ LinkList p; p = L->next; while (p && p->data != e) { p = p->next; } return p;}
插入元素
int ListInsert(LinkList &L, int i, int e){ LinkList p, s; p = L; int j = 0; while (p && j < i - 1) { p = p->next; j++; } if (!p || j > i - 1) return ERROR; s = new LNode; s->data = e; s->next = p->next; p->next = s; return OK;}
删除元素
int ListDelete(LinkList &L, int i){ LinkList p, q; p = L; int j = 0; while (p->next && j < i - 1) { p = p->next; j++; } if (!(p->next) || j > i - 1) return ERROR; q = p->next; p->next = q->next; delete q; return OK;}
前插法创建
void CreateList_H(LinkList &L, int n){ LinkList p; L = new LNode; L->next = NULL; for (int i = 0; i < n; i++) { p = new LNode; scanf("%d",&p->data); p->next = L->next; L->next = p; }}
后插法创建
void CreateList_R(LinkList &L, int n){ L = new LNode; L->next = NULL; LinkList r, p; r = L; for (int i = 0; i < n; i++) { p = new LNode; scanf("%d",&p->data); p->next = NULL; r->next = p; r = p; }}
遍历元素 TraverseList
void TraverseList(LinkList L){ L = L->next; while (L) { printf("%d->", L->data); L = L->next; }}
阅读全文
0 0
- 数据结构基础【03】单链表
- 基础数据结构03:栈
- 数据结构基础之单链表
- 数据结构基础之单链表
- 数据结构基础--单链表
- 【数据结构】单链表--基础
- 数据结构基础--单链表逆序
- 基础数据结构——单链表
- 第十三章 数据结构基础--单链表
- 数据结构基础
- 数据结构基础
- 数据结构基础
- 数据结构基础
- 数据结构基础
- 基础数据结构
- 数据结构基础
- 数据结构基础
- 数据结构基础
- Android Studion 快速定位内存泄露的方法
- android系统架构图及各层介绍
- Hibernate和JPA之间的联系
- Eclipse常见错误 (Tomcat)
- vscode中利用git通过ssh连接github
- 数据结构基础【03】单链表
- OracleDataGuard部署
- 为什么要用博客
- 关于 hashCode() 你需要了解的 3 件事
- equals、“==”与hashCode的介绍
- Mac设置环境变量
- C++ 标准模板库STL的数据结构
- Python中callable函数如何使用?
- linux之vim常用命令