C++单链表的那些事

简介: 对于初学者,链表很麻烦细化分有这么几点:1.定义结点的结构体,以及单链表的类2.初始化单链表3.插入函数4.删除函数5.清空链表6.销毁链表

对于初学者,链表很麻烦

细化分有这么几点:

1.定义结点的结构体,以及单链表的类

2.初始化单链表

3.插入函数

4.删除函数

5.清空链表

6.销毁链表

代码如下:读者自行理解:

#include<iostream>
using namespace std;
struct Node {
  int data;
  Node* next;
};
class LinkeListt {
private:
  Node* head;
  int len;
public:
  //初始化
  void Init() {
    head = new Node;
    head->next = NULL;
    len = 0;
  }
  //输出
  void Output() {
    cout << "链表的长度为:" << len << endl;
    if (len > 0) {
      cout << "内容:" << endl;
      Node* p = head->next;
      for (int i = 0; i < len; i++) {
        cout << p->data << ".";
        p = p->next;
      }
      cout << endl;
    }
  }
  //插入 pos:1-(n+1)
  void Insert(int pos,int value) {
    //定位指针p指向pos的上一个结点
    Node* p = head;//头结点
    for (int i = 0; i < pos - 1; i++) {
      p = p->next;
    }
    //分配q结点并赋值
    Node* q = new Node;
    q->data = value;
    q->next = NULL;
    //插入
    q->next = p->next;
    p->next = q;
    //len自增
    len++;
  }
  //返回len的长度
  int Getlen() {
    return len;
  }
  //删除 pos:1-n
  void Delete(int pos,int *value) {
    //定位指针p指向pos的上一个结点
    Node* p = head;//头结点
    for (int i = 0; i < pos - 1; i++) {
      p = p->next;
    }
    //q指向删除的结点
    Node* q = p->next;
    //删除
    p->next = q->next;
    //返回值
    *value = q->data;
    delete q;
    len--;
  }
  //清空链表
  void Clear()
  {
    int num = len;
    if (num > 0) {
      int temp;
      //循环删除
      for (int i = 0; i < num; i++) {
        Delete(1, &temp);
      }
    }
  }
  //判断链表是否为空
  bool isEmpty() {
    return (len == 0) ? true : false;
  }
  //销毁
  void Destroy() {
    //判断是否为空,非空则清除链表
    if (!isEmpty()) {
      Clear();
    }
    //最后把头指针释放
    delete head;
  }
};
int main()
{
  LinkeListt myself;
  myself.Init();
  myself.Output();
  for (int i = 1; i <= 100; i++) {
    myself.Insert(myself.Getlen()+1, i);
  }
  myself.Output();
  int temp;
  for (int i = 1; i <= 50; i++)
  {
    myself.Delete(i+1, &temp);
    cout << "Delete:" << temp << endl;
  }
  myself.Output();
  myself.Destroy();
}


相关文章
|
Rust 自然语言处理 Java
单链表的多语言表达:C++、Java、Python、Go、Rust
单链表是一种链式数据结构,由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据,只用于表示链表的开始位置。单链表相对于数组的优点是插入和删除元素时不需要移动其他元素,时间复杂度为O(1)。但是,在查找元素时,单链表比数组要慢,时间复杂度为O(n)。
16656 7
|
C++ 容器
【C++操作手册】利用C++内置STL容器实现单链表各种功能定义
【C++操作手册】利用C++内置STL容器实现单链表各种功能定义
200 0
【C++操作手册】利用C++内置STL容器实现单链表各种功能定义
|
存储 Java 应用服务中间件
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
|
C++
单链表的增删改查等操作(C++语言)
单链表的增删改查等操作(C++语言)
105 0
|
存储 C++
线性表的链式存储结构 单链表(Singly Linked List) C++
线性表的链式存储结构 单链表(Singly Linked List) C++
|
存储 DataX C++
头插法、尾插法建立单链表(含详细注释C++)
头插法、尾插法建立单链表(含详细注释C++)
433 0
|
C++ 存储 测试技术