C++编程练习(2)----“实现简单的线性表的链式存储结构“
2014-03-25 20:12
549 查看
单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。
对于查找操作,单链表的时间复杂度为O(n)。
对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1)。
单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制。
链式存储结构中,结点由存放数据元素的数据域和存放后继结点地址的指针域组成。
具体代码如下:
单链表适用的场景:
1、需要频繁插入和删除时。
2、线性表中的元素个数变化较大或者根本不知道多大时。
对于查找操作,单链表的时间复杂度为O(n)。
对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1)。
单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制。
链式存储结构中,结点由存放数据元素的数据域和存放后继结点地址的指针域组成。
具体代码如下:
#include<iostream> #define OK 1 #define ERROR 0 #define TRUE 1 #define ERROR 0 typedef int ElemType; typedef int Status; struct Node{ public: Node():data(0),next(NULL) {}; ElemType data; Node *next; Status GetElem(int i,ElemType *e) const; Status ListInsert(int i,ElemType e); Status ListDelete(int i,ElemType *e); Status ShowList(); }; Status Node::GetElem(int i,ElemType *e) const { int j=1; /*j为计数器*/ Node *p=new Node; p=next; while (p && j<i) { p=p->next; ++j; } if (!p || j>i) return ERROR; *e=p->data; return OK; } /*初始条件:顺序线性表已存在,1<=i<=ListLength*/ /*操作结果:在表中第i个结点位置之前插入新的数据元素e,链表长度加1*/ Status Node::ListInsert(int i,ElemType e) { int j=1; Node *p=new Node; Node *s=new Node; p=this; while (p && j<i) { p=p->next; ++j; } if (!p || j>i) return ERROR; s->data=e; s->next=p->next; p->next=s; return OK; } /*初始条件:线性表已经存在,1<=i<=ListLength*/ /*操作结果:删除表的第i个结点,并用e返回其值,线性表长度减1*/ Status Node::ListDelete(int i,ElemType *e) { int j; Node* p=new Node; Node* q=new Node; p=this; j=1; while(p->next && j<i) { p=p->next; ++j; } if (!(p->next) || j>i) return ERROR; q=p->next; /*要删除的结点是p->next*/ p->next=q->next; *e=q->data; delete q; return OK; } Status Node::ShowList() { Node* p=new Node; p=this; while (p->next) { std::cout<<p->data<<" "; p=p->next; } std::cout<<p->data<<std::endl; return OK; }
单链表适用的场景:
1、需要频繁插入和删除时。
2、线性表中的元素个数变化较大或者根本不知道多大时。
相关文章推荐
- 【转】一个URL编码和解码的C++类
- C语言中 i++ 和 ++i 有什么区别?
- C++动态库静态库和Release、Debug版本的属性设置
- 我的c++开发工具集
- 几个C语言水平测试题
- C++虚函数、虚继承
- 位运算及其应用
- 《C++ Primer第五版》读书笔记(17)--Specialized Tools and Techniques
- 栈的图文解析 和 对应3种语言的实现(C/C++/Java)
- 解决了/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found的问题
- 《C++ Primer第五版》读书笔记(16)--Tools for Large Programs
- C++面试小结
- 《C++ Primer第五版》读书笔记(15)--Specialized Library Facilities
- 【算法】 动态规划 最长公共子序列
- C++ for循环效率
- C++学习之Pair
- onst和volatile分析
- 简单 ATL COM组件开发介绍
- C++总结:C++中的const和constexpr(转)
- C语言宏定义##连接符和#符的使用