c++实现线性表链式存储结构(单链表)
2019-01-21 20:26
483 查看
至于链表的基础知识请自行补充,这里不作赘述
链式线性表的优点:插入和删除元素不需要移动其他元素,空间利用率高
缺点:查找以及查找较为麻烦
实现:
linkedList.h:
[code]// // Created by shuai on 19-1-20. // #ifndef INC_002_LINKEDLIST_H #define INC_002_LINKEDLIST_H /* c++实现线性表的链式存储结构(单链表) 以int型数据为例,本次不采用模板 写的较为简单,仅仅实现简单的功能 本链表有头结点,但头结点不是链表的必要元素,头结点的数据域为空,指针域指向链表的第一个元素 链表的优缺点: 在任意位置存取方便 空间利用率较高等 遍历较为麻烦 */ #include "iostream" using namespace std; //template <class T> struct Node{ int data; Node * pNext; }; class linkedList { public: linkedList(); //无参构造函数,建立只有头结点的空链表 linkedList(int a[], int n); //有参构造函数,使用数组a建立单链表 ~linkedList(); //析构函数 int len(); //得到单链表的长度 int getElem(int i); //得到第i个位置上的元素 int locateElem(int elem); //查找elem的位置 void listInsert(int i, int elem); //在第i个位置插入元素elem int listDelete(int i); //删除第i个位置的元素 并返回 void showList(); private: Node * pFirst; }; #endif //INC_002_LINKEDLIST_H
linkedList.cpp:
[code]// // Created by shuai on 19-1-20. // #include "linkedList.h" linkedList::linkedList() { pFirst = new Node; //空链表的头结点 指针域为空,数据域也为空 pFirst->pNext = NULL; pFirst->data = NULL; } //尾插法 linkedList::linkedList(int *a, int n) { pFirst = new Node; //头结点 pFirst->pNext = NULL; pFirst->data = NULL; //头结点的数据域为空 Node * rear = pFirst; //尾结点,初始化 for(int i = 0;i < n;i++){ Node * s = new Node; s->data = a[i]; rear->pNext = s; //将尾结点的指针指向新的尾结点 rear = s; //s现在就是新的尾结点 } rear->pNext = NULL; //尾结点的指针域为空 } linkedList::~linkedList() { while (pFirst != NULL){ Node *p = pFirst; //if(pFirst->pNext != NULL) pFirst = pFirst->pNext; delete p; } } //至于头插法 自个儿可以去写 //尾插法 void linkedList::listInsert(int i, int elem) { int cnt = 0; Node * p = pFirst; //讲p指向头指针 while(p){ if(cnt == i - 1){ Node * s = new Node; s->data = elem; s->pNext = p->pNext; p->pNext = s; } p = p->pNext; cnt++; } } int linkedList::getElem(int i) { int cnt = 0; Node * p = pFirst; while (p){ if(cnt == i){ return p->data; } p = p->pNext; cnt++; } return -1; } int linkedList::len() { int cnt = 0; Node * p = pFirst; while(p){ if(p->pNext == NULL) return cnt; p = p->pNext; cnt++; } return cnt; } void linkedList::showList() { Node * p = pFirst->pNext; if(p == NULL){ cout << "此链表为空" << endl; return; } while (p){ cout << p->data << " "; p = p->pNext; } cout << endl; } int linkedList::locateElem(int elem) { Node * p = pFirst->pNext; int cnt = 1; while (p){ if(p->data == elem) return cnt; p = p->pNext; cnt++; } cout << "此链表没有这个元素" << endl; return -1; } int linkedList::listDelete(int i) { int cnt = 1; Node * p = pFirst; while (p != NULL && cnt < i){ p = p->pNext; cnt++; } Node * q = p->pNext; int x = q->data; p->pNext = q->pNext; delete q; return x; }
main.cpp:
[code]#include <iostream> #include "linkedList.h" using namespace std; int main() { //std::cout << "Hello, World!" << std::endl; int a[] = {1,2,3,4,5,6,7,8,9}; linkedList l1; linkedList l2(a, 9); //cout << sizeof(l1) << " " << sizeof(l2) << endl; cout << l1.len() << " " << l2.len() << endl; cout << l2.getElem(0) << endl; cout << int(NULL) << endl; l1.showList(); l2.showList(); l2.listInsert(4,20); l2.showList(); cout << l2.listDelete(6) << endl; l2.showList(); cout << l2.locateElem(20); return 0; }
运行部分截图:
相关文章推荐
- 数据结构——线性表——链式存储结构——C++实现线性表
- 一、(2)C++ 实现简单的线性表(链式存储结构 - 单链表)
- c/c++ 数据结构-线性表(链式表示&实现&单链表定义&实现)
- 单链表基础操作C++实现
- c++实现单链表基本操作
- 以c++的方式实现单链表
- 线性表链式存储结构实现 --双向循环链表
- 单链表C++实现_0904
- 线性表链式存储结构的c语言实现
- 【C++】c++实现线性表、链表
- 删除线性表指定位置的元素(单链表实现)
- C++单链表的实现
- 左神的书——《程序员代码面试指南》之逆置单链表的部分节点 c++实现
- C++用模板实现单链表(类外实现)
- 一、(1)C++ 实现简单的线性表(顺序存储结构)
- C++实现单链表(类和对象)——简单实现
- 单链表基础操作C++实现
- C++实现单链表
- 单链表的插入和删除 C++实现
- C++实现单链表的逆置