- 浏览: 771046 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
单链表(线性链表):它用指针表示结点间的逻辑关系。一个存储结点包含data(数据域),link(指针域,链域)。它的特点是长度可以很方便的进行扩充。数据元素的顺序与其链表表示中结点的物理顺序可能不一致,一般通过指针将各数据元素按逻辑顺序链接起来
由于链接表的每个结点要带指针域,所以存储空间比顺序存储要付出较大的代价。
LinkedList.h
LinkedList.cpp
由于链接表的每个结点要带指针域,所以存储空间比顺序存储要付出较大的代价。
LinkedList.h
#ifndef LINKEDLIST_H #define LINKEDLIST_H #include"linearList.h" /* 带头结点的单链表 */ template<typename T> class LinkNode{ public: T data; LinkNode<T>* link;//链指针域 LinkNode(LinkNode<T> *ptr = NULL){ link = ptr; } LinkNode(const T& item,LinkNode<T>* ptr=NULL){ data = item; link = ptr; } }; template<typename T> class List:public LinearList<T>{ protected: LinkNode<T> *first;//头结点 LinkNode<T> *last;//最后一个元素 public: List(); List(const T& x); List(List<T>& L); ~List(); void makeEmpty(); int Size()const; int Length()const; LinkNode<T>* getHeader()const; int Search(T& x)const; LinkNode<T>* Search(T x)const; int Locate(int i)const; LinkNode<T>* locate(int i)const; bool getData(int i, T &x) const; void setData(int i, T &x); bool Insert(int i, T &x); bool Remove(int i, T &x); bool IsEmpty() const; bool IsFull() const; void Sort(); void input(); void output(); List<T>& operator=(List<T>& L); void push_back(const T &x); }; #endif // LINKEDLIST_H
LinkedList.cpp
#include<iostream> #include<stdlib.h> #include"LinkedList.h" using namespace std; template<typename T> List<T>::List() { first = new LinkNode<T>; last = first; } template<typename T> List<T>::List(const T &x) { first = new LinkNode<T>(x); } template<typename T> List<T>::~List() { makeEmpty(); } template<typename T> List<T>::List(List<T> &L) { T value; LinkNode<T> *srcptr = L.getHeader(); LinkNode<T> *destptr = first = new LinkNode<T>; while(srcptr->link!=NULL){ value = srcptr->link->data;//第一个结点的值 destptr->link = new LinkNode<T>(value); destptr = destptr->link; srcptr = srcptr->link; } destptr->link = NULL;//不要忘了把最后一个点的值设成NULL } /* 从前往后删除 */ template<typename T> void List<T>::makeEmpty() { LinkNode<T> *p; while(first->link!=NULL){ p = first->link; first->link = p->link; delete p; } } template<typename T> int List<T>::Length()const { int i=0; LinkNode<T> *p = first->link; while(p!=NULL){ i++; p = p->link; } return i; } template<typename T> int List<T>::Size() const { return Length(); } template<typename T> LinkNode<T>* List<T>::getHeader()const { return first; } template<typename T> int List<T>::Search(T&)const { return 0; } template<typename T> LinkNode<T>* List<T>::Search(T x)const { LinkNode<T> *p = first->link; while(p!=NULL){ if(p->data==x){ break; } p = p->link; } return p; } template<typename T> int List<T>::Locate(int)const { return 0; } template<typename T> LinkNode<T>* List<T>::locate(int i)const { if(i<0) return NULL; LinkNode<T> *p = first; int j=0; while(p!=NULL&&j<i){ p = p->link; j++; } return p; } template<typename T> bool List<T>::getData(int i, T &x) const { if(i<0) return NULL; LinkNode<T> *p = locate(i); if(NULL!=p){ x = p->data; return true; }else{ return false; } } template<typename T> void List<T>::setData(int i, T &x) { if(i<=0)//0是头结点(first) return; LinkNode<T> *p = locate(i); if(NULL!=p){ p->data = x; } } /* 将x插入在第i个结点之后 */ template<typename T> bool List<T>::Insert(int i, T &x) { if(i<=0) return false; LinkNode<T> *p = locate(i); if(NULL!=p){ LinkNode<T> *newNode = new LinkNode<T>(x); if(NULL==newNode){ cerr << "Memory allocation error" << endl; exit(1); } newNode->link = p->link; p->link = newNode; return true; }else{ return false; } } template<typename T> bool List<T>::Remove(int i, T &x) { if(i<=0) return false; LinkNode<T> *current = locate(i-1); if(NULL!=current&&NULL!=current->link){ LinkNode<T> *delPtr = current->link; current->link = delPtr->link; x = delPtr->data; delete delPtr; return true; }else{ return false; } } template<typename T> bool List<T>::IsEmpty() const { return first->link==NULL?true:false; } template<typename T> bool List<T>::IsFull() const { return false; } template<typename T> void List<T>::Sort() { } template<typename T> void List<T>::input() { } template<typename T> void List<T>::output() { LinkNode<T> *current = first->link; while(NULL!=current){ cout << current->data << " "; current = current->link; } cout << endl; } template<typename T> List<T>& List<T>::operator=(List<T>& L) { T value; LinkNode<T> *srcptr = L.getHeader(); LinkNode<T> *destptr = first = new LinkNode<T>; while(srcptr->link!=NULL){ value = srcptr->link->data; destptr->link = new LinkNode<T>(value); srcptr = srcptr->link; destptr = destptr->link; } destptr->link = NULL; return *this; } template<typename T> void List<T>::push_back(const T &x) { LinkNode<T> *newNode = new LinkNode<T>(x); last->link = newNode; last = last->link; } int main() { List<int> l; int num = 0; for(int i=1;i<=10;i++){ l.push_back(i); } l.Remove(3,num); cout << "num:" << num << endl; l.push_back(11); num = 120; l.Insert(6,num); l.getData(8,num); cout << "8:" << num << endl; l.output(); cout << "Empty?" << l.IsEmpty() << endl; } num:3 8:8 1 2 4 5 6 7 120 8 9 10 11 Empty?0
发表评论
-
时间复杂度推导
2012-06-05 22:57 9881.用常数1取代运行时间中的所有加法常数 2.在修改后的运行次 ... -
数据结构概论2
2012-06-04 22:19 811数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为 ... -
排序概念
2011-06-24 14:51 791数据表:待排序数据元素的有很集合 排序码:通常数据元素有多个 ... -
图的基本概念
2011-06-20 16:18 751完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全 ... -
红黑树
2011-06-16 14:29 518红黑树: 1.根结点和所有的叶结点都是黑色 2.从根结点到叶结 ... -
链表反转
2011-06-12 18:03 1104template<typename T> v ... -
散列表(哈希表)
2011-06-09 09:55 1081散列表(hash table):是表示集合和字典的另一种有效方 ... -
跳 表
2011-06-08 11:12 807#ifndef SKIPLIST_H #define S ... -
字 典
2011-06-08 10:06 930字典:以集合为基础,并支持支持Member,Insert和Re ... -
LinkedSet
2011-06-07 13:08 926改了很久的bug #ifndef LINKEDSET_H ... -
bitset
2011-06-06 12:27 889bitSet.h #ifndef BITSET_H #d ... -
Huffman树
2011-06-02 11:06 920Huffman树,又称最优二叉树,是一类加权路径长度最短的二叉 ... -
堆
2011-06-02 09:19 954在优先级队列的各种实现中,堆是最高效的一种数据结构 关键码: ... -
森 林
2011-06-01 11:09 603森林与二叉树互转,主要是子结点转左子树,兄弟结点转右子树 深 ... -
二叉树的链式实现
2011-05-31 11:24 1266binaryTree.h #ifndef LINKEDBI ... -
二叉树基本概念
2011-05-30 10:05 844一棵二叉树的结点的一个有限集合:该集合或者为空,或者是由一个根 ... -
树基本概念
2011-05-30 09:28 896结点(node):包含数据项及指向其他结点的分支。 结点的度( ... -
广义表
2011-05-27 10:57 938广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表 ... -
矩阵相关
2011-05-26 10:22 934矩阵:是一个具有m行n列的二维数组。 上三角矩阵:只存储对角 ... -
优先级队列
2011-05-21 11:24 604PQueue.h #ifndef PQUEUE_H #d ...
相关推荐
单链表是计算机科学中数据结构的一个重要概念,它属于线性表的一种,主要用于存储和组织数据。在本文中,我们将深入探讨单链表的理论基础、操作以及它在实际编程中的应用。 线性表是一种基本的数据结构,由n(n >= ...
数据结构-线性表-单链表的查找、插入、删除.doc
### 实验1-2 线性表-单链表 #### 实验目的 本次实验旨在帮助学生理解和掌握单链表的基本概念与操作方法。通过实际编程实践,学生能够熟悉以下内容: 1. **掌握使用C Free 5.0进行程序调试的方法**:通过这个实验,...
线性表-3-单链表的头插法与尾插法创建.cpp
第2章线性表第4讲-单链表
"数据结构C语言版-线性表的单链表存储结构表示和实现" 本文档介绍了线性表的单链表存储结构表示和实现,使用C语言编写,提供了多种操作函数,包括初始化、销毁、清空、判断空表、获取元素、获取元素位序等。 数据...
第2章线性表第5讲-单链表的算法设计
使用C语言将《数据结构》中的ADT(抽象数据类型)中操作实现,帮助理解
数据结构C语言版-线性表的单链表存储结构表示和实现优质资料.doc 知识点摘要: 1. 数据结构的基本概念:数据结构是计算机科学中的一种基本概念,指的是数据的组织和存储方式。 2. 线性表的概念:线性表是一种基本...
在实际应用中,线性表的实现方式多种多样,其中链式存储是一种常见的实现方法,而单链表是链式存储结构的一种基本形式。 单链表的每个元素称为节点,每个节点包含两部分:数据域和指针域。数据域用于存储元素的值,...
(1)掌握线性表的顺序存储结构; (2)验证单链表及其基本操作的实现; (3)进一步理解算法与程序的关系,能够将单链表算法转换为对应的程序。 1.2 实验要求: (1)用头插法(或尾插法)建立带头结点的单链表; ...
单链表是数据结构中的一种基础类型,尤其在C语言编程中经常被使用。它是一种线性的、非连续的数据组织形式,每个元素称为节点,每个节点包含数据和一个指向下一个节点的指针。本篇文章将深入探讨单链表的创建、插入...
线性表、单链表和栈是数据结构中基础且重要的概念,它们在计算机科学和软件工程中扮演着核心角色。下面将详细解释这些概念及其Java实现。 **线性表** 是一种基本的数据结构,它是由n(n>=0)个相同类型元素构成的...
线性表(单链表 C++语言编写的) 本文将详细介绍线性表的概念、单链表的实现、C++语言的应用及相关知识点。 一、线性表的概念 线性表是数据结构中的一种,指的是元素之间存在着一对一的关系,且每个元素都只有一...
数据结构c++ 线性表 单链表 【4】Chapter3 线性表1-顺序表及单链表
本实战项目聚焦于数据结构中的线性表,特别是通过单链表进行实现。线性表是一种基本的数据结构,由相同类型元素的有序序列组成,而单链表是其一种常见表示方式。 单链表是一种动态数据结构,每个元素(称为节点)...
2022410067商萱萱线性表(单链表)合并.cpp
单链表是一种线性表的链式存储方式,通过指针实现线性逻辑关系。单链表的基本操作包括头插法建立、尾插法建立、按序号查找、按值查找、插入结点、删除节点等。 链表的优缺点: 链表的优点是插入和删除操作的时间...