带头结点的单链表的操作 学习总结
2015-09-15 21:04
447 查看
带头结点的单链表的操作 学习总结
首先给出单链表的存储结构定义如下:struct LNode { Elemtype date; LNode* next; }; typedef LNode* LinkList;
下面是带头结点的单链表的基本操作:
初始化
// 构造一个空线性表L void InitList(LinkList& L) { // 产生头结点,并使L指向该头结点 L = (LinkList)malloc(sizeof(LNode)); if(!L) { // 异常 } }
销毁线性表
// 前提:线性表L存在 void DestroyList(LinkList& L) { LinkList q; while(L) { q = L->next; // q指向头结点之后的第一个结点 free(L); L = q; // L现在指向头结点之后的第一个结点 } }
单链表置空
// 前提:单链表存在 void ClearList(LinkList& L) { LinkList q = L->next; // q指向头结点之后的结点 L->next = NULL; DestroyList(q); }
单链表判空
int ListEmpty(LinkList& L) { if (L->next) { return FALSE; } else { return TRUE; } }
求单链表的长度
// 前提:单链表存在 int ListLength(LinkList L) { int length = 0; LinkList q = L->next; // q指向头结点之后的结点 while(q) { length++; q = q->next; } return length; }
根据索引查找元素
int GetElem(LinkList L, int Index, ElemType& Element) { int LoopId = 1; LinkList q = L->next; // 直到q指向第Index个结点或第Index个结点不存在 while(q && LoopId < Index) { LoopId++; q = q->next; } if (!q || LoopId > Index) { return ERROR; } Element = q->data; return OK; }
根据元素找索引
int LocateElem(LinkList L, ElemType Element) { int Index = 0; LinkList q = L->next; while(q) { Index++; if(Element == L->data) { return Index; } q = q->next; } return 0; }
插入新元素
int ListInsert(LinkList L, int Index, ElemType Element) { int NumId = 0; LinkList p = L; LinkList s; // 查找第Index - 1 个结点 while(p && NumId < Index - 1) { NumId++; p = p->next; } if (!p || NumId > Index - 1) { return ERROR; } s = (LinkList)malloc(sizeof(LNode)); s->data = Element; s->next = p->next; p->next = s; return OK; }
删除元素
int ListDelete(LinkList L, int Index, ElemType& Element) { int NumId = 0; LinkList q, p = L; // p指向第Index个结点的前驱 while(p->next && NumId < Index - 1) { NumId++; p = p->next; } if(!p->next||j>i-1) return ERROR; q=p->next; p->next=q->next; e=q->data; free(q); return OK; }
相关文章推荐
- android之gradle构建工具学习之路(二)
- 退役狗回来继续写博客……C++数据结构//我觉得自己深深地被djh老师给欺骗了
- hdu5439 二分
- 矩阵快速幂
- 第三十九天 手机媒体应用:SoundPool(播放提示音)、录音、视频播放、本地相机
- 黑盒测试
- ApplicationContextAware的理解
- ### C++总结-[类的继承]
- 线程同步
- 1001_Alisha’s Party_2015 ACM/ICPC Asia Regional Changchun Online(优先队列)
- 软件测试方法和技术 之 基本名词都搞清楚篇
- linux hadoop 搭建
- 日期格式转换
- C++内存对齐
- 【存模板】树状数组
- apt-get install package:Unable to locate package
- iOS中的双指针
- 网页和HTML
- Ubuntu14.04不支持U盘exfat格式该如何解决
- vmware安装linux