c++链表

带tail尾指针的写法:

1 #include <iostream>
02 using namespace std;
03 class linklist {
04 private:
05     class linknode {
06     public:
07         int data;
08         linknode *next;
09         linknode():next(NULL) {}
10         linknode(int d):data(d),next(NULL) {}
11     };
12     linknode *head, *tail;
13 public:
14     linklist() {
15         head=new linknode();
16         tail=head;
17     }
18     void add(int data) {
19         linknode *temp=new linknode(data);
20  
21         tail->next=temp;
22         tail=temp;
23     }
24     void display() {
25         linknode *p=head->next;
26         while(p->next) {
27             cout<<p->data<<' ';
28             p=p->next;
29         }
30         cout<<p->data<<endl;
31     }
32 };
33 int main() {
34     int n;
35     cin>>n;
36     linklist x;
37     while(n--) {
38         int a;
39         cin>>a;
40         x.add(a);
41     }
42     x.display();
43     return 0;
44 }

C++ 链表是一种基础且重要的数据结构,在计算机科学领域应用广泛。它通过节点间的指针链接来存储数据,与数组的连续存储方式不同。 ### 链表的实现 - **单向链表**:在 C++ 中,单向链表节点通常包含数据域和指向下一个节点的指针。虽然未给出单向链表节点的具体代码,但基本结构可类比双向链表节点,即一个数据域和一个指向下一节点的指针。 - **双向链表**:双向链表在单向链表基础上增加了一个指向前一个节点的指针。以下是双向链表节点结构体及创建新节点函数的代码示例: ```cpp // 双向链表节点结构体 typedef struct DNode { int data; struct DNode *prev; struct DNode *next; } DNode; // 创建新节点的函数 DNode* createDNode(int data) { DNode *newNode = (DNode*)malloc(sizeof(DNode)); newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode; } ``` 此外,还有使用模板实现的双链表节点结构: ```cpp // 双链表节点结构 template <typename T> struct DoublyNode { T data; // 数据域 DoublyNode* prev; // 指向前驱节点 DoublyNode* next; // 指向后继节点 DoublyNode(const T& val) : data(val), prev(nullptr), next(nullptr) {} }; ``` ### 链表的应用场景 链表适用于需要频繁进行插入和删除操作的场景,在内存管理、缓冲区管理、动态内存分配等方面有广泛应用。例如,操作系统中的任务调度和内存管理,就经常使用链表来管理任务和内存块。链表也是队列、栈和哈希表等数据结构的实现基础 [^1][^5]。 ### 链表的操作技巧 在 C++ 中对链表进行操作时,如排序操作,可使用归并排序,示例代码如下: ```cpp list_head->next = MergeSort(list_head->next); for_each(pow, list_head) cout<<pow->data<<"\t"; cout<<endl; ``` 这段代码先对链表进行归并排序,然后遍历链表输出每个节点的数据 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值