21xrx.com
2024-12-22 16:23:23 Sunday
登录
文章检索 我的文章 写文章
C++中使用struct定义list类
2023-07-07 15:29:18 深夜i     --     --
C++ struct list 定义 数据结构

在C++编程语言中,结构体通常被用来定义数据类型。而list类则是一种非常常用的数据结构。在C++中,我们可以使用struct来定义list类。下面我们来介绍一下如何使用struct定义list类。

首先,我们需要定义一个struct来表示list的每一个节点。这个struct通常包含两个成员变量,一个表示当前节点的值,另一个表示指向下一个节点的指针。具体的定义如下:


struct ListNode {

  int val;

  ListNode *next;

  ListNode(int x) : val(x), next(NULL) {}

};

其中,val表示当前节点的值,next表示指向下一个节点的指针。在构造函数中,我们对val进行初始化,而对于next指针,我们初始化为NULL,表示当前节点没有下一个节点。

接着,我们需要定义list类。这个list类应该包含一些基本的操作,比如push_back、pop_front、insert等操作。具体的定义如下:


struct List {

  ListNode *head;

  List() : head(NULL) {}

  void push_back(int x) {

    ListNode *node = new ListNode(x);

    if (!head)

      head = node;

     else {

      ListNode *cur = head;

      while (cur->next)

        cur = cur->next;

      

      cur->next = node;

    }

  }

  void pop_front() {

    if (!head) return;

    ListNode *tmp = head;

    head = head->next;

    delete tmp;

  }

  void insert(int pos, int val) {

    ListNode *node = new ListNode(val);

    if (pos == 0)

      node->next = head;

      head = node;

     else {

      ListNode *cur = head;

      for (int i = 0; i < pos - 1; ++i)

        cur = cur->next;

      

      node->next = cur->next;

      cur->next = node;

    }

  }

};

在这个list类中,我们首先定义了一个head节点,表示整个链表的头部。在构造函数中,我们初始化head为NULL,表示当前链表为空。

接着,我们实现了push_back操作,用来在链表的末尾添加一个节点。我们首先创建一个新的节点node,然后判断head是否为空。如果为空,说明当前链表为空,直接将head指向新节点;否则,我们遍历当前链表,找到链表末尾的节点,将其next指针指向新节点即可。

pop_front操作用来删除链表的头节点。我们首先判断head是否为空。如果为空,说明当前链表为空,不做任何操作;否则,我们将head指向head的下一个节点,然后删除原来的head节点即可。

insert操作用来在链表的某个位置插入一个节点。我们首先创建一个新的节点node,然后判断插入的位置是否是链表的头部。如果是头部,我们将新节点的next指向head,然后将head指向新节点;否则,我们遍历当前链表,找到插入位置的前一个节点cur,将新节点的next指向cur的next节点,然后将cur的next指向新节点即可。

通过上面的代码,我们可以实现一个简单的list类。当然,实际上STL中的list实现肯定更加复杂和完善,但是通过上面的代码,我们可以大致了解list是如何实现的,并且学习到了一些非常基本的链表操作。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复