简易有序链表

链表是一种在内存中非连续、非顺序的存储结构,链表的数据元素的逻辑顺序是通过链表中的指针链接次序实现的,就是说通过一个指针指向下一个元素,而下一个元素的指针再指向再下一个。链表是由一系列结点(链表中的每一个元素称为结点)组成的,结点可以在程序运行时动态生成,所以不用固定链表的长度,从而可以大大的节省内存空间。

我写的这个简易链表主要实现了“增删改查”的功能,其中每个结点包括三个部分:第一个是链表元素的索引值(可用于操作元素),第二个是用于存放内容的字符串空间,第三个就是存放指向下一个元素的指针。

详细实现的代码:

List.h 链表的头文件

class List{

public:

    List():head(nullptr){};

    ~List(){};

 

    struct Node;

 

    void Insert(int index, std::string values);

    void Show(int index = NULL);

    void Delete(int index);

    void Update(int index, std::string values);

 

private:

    Node *head;

};

List.cpp 链表的源文件

#include <iostream>

#include <string>

#include "List.h"

 

struct List::Node{

    int index;

    std::string values;

    Node *next;

};

 

void List::Insert(int index, std::string values){

    Node *node = new Node, *p = head;

 

    node->index = index;

    node->values = values;

    node->next = nullptr;

 

    if(head == nullptr){

        head = node;

    }else{

        if(p->index > node->index){

            node->next = head;

            head = node;

        }else{

            while(p){

                if(p->next != nullptr){

                    if(p->next->index > node->index){

                        node->next = p->next;

                        p->next = node;

                        break;

                    }

 

                }else{

                    p->next = node;

                    break;

                }

 

                p = p->next;

            }

        }

 

    }

}

 

void List::Delete(int index){

    Node *p = head, *tmp = nullptr;

    if(p->index == index){

        tmp = p->next;

        head = tmp;

    }else{

        while(p){

            if(p->next->index == index){

                tmp = p->next->next;

                delete p->next;

                p->next = tmp;

 

                break;

            }

 

            p = p->next;

        }

    }

 

}

 

void List::Show(int index){

    Node *p = head;

 

    while(p){

 

        if(index != NULL && p->index == index){

            std::cout << p->index << "\t" << p->values << std::endl;

            break;

        }

         

        if(index == NULL){

            std::cout << p << "\t" << p->index << "\t" << p->values << "\t" << p->next << std::endl;

        }

 

        p = p->next;

    }

 

    std::cout << std::endl;

}

 

void List::Update(int index, std::string values){

    Node *p = head;

 

    while(p){

        if(p->index == index){

            p->values = values;

            break;

        }

 

        p = p->next;

    }

}

[Insert函数详细说明]

这个函数只要分为4个部分,第一部分是建立一个新的结点。第二部分是初始化链表,若已初始化则跳过该部分。第三部分是判断新的结点的元素是否小于已存在的元素,若小于则把新元素插入在链表的最前。第四部分就是把元素插入对应的地方,这个插入行为是按索引值来排列的。

Main.cpp 程序的主文件

#include <iostream>

#include <string>

#include "List.h"

 

using namespace std;

 

int main(){

    List _list;

 

    //通过循环插入元素

    for(int i = 0; i < 8; i++){

        char tmp[10];

        sprintf_s(tmp, "test%d", i);

        _list.Insert(i, tmp);

    }

    _list.Show();

 

    //删除元素2

    _list.Delete(2);

    _list.Show();

 

    //显示元素3

    _list.Show(3);

 

    //修改元素5

    _list.Update(5, "test");

    _list.Show();

 

    //释放内存

    _list.~List();

 

    system("pause");

    return 0;

}

这就是简易链表的实现方式,虽然效率不是最高的写法,但是看起来非常的清晰。

转载文~侵权请联系删除!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值