C++ 数据结构链表的实现代码

+关注继续查看

总结：

1、链表List的基本单元是节点Node，因此想要操作方便，就必须为每一步打好基础，Node的基本结构如下：

class Node {
public:
int data;
Node *next;

Node(int da = 0, Node *p = NULL) {
this->data = da;
this->next = p;
}
};

2、第二步就是创建我们的链表了，同样我们这里先给出链表的代码，再进行一一的解释。

class List{
private:
int position;
public:
void print();
void Insert(int da=0);
void Delete(int da=0);
void Search(int da=0);
};

#include <iostream>

using namespace std;

class Node {
public:
int data;
Node *next;

Node(int da = 0, Node *p = NULL) {
this->data = da;
this->next = p;
}
};

class List {
private:
int position;
public:
List() { head = tail = NULL; };

~List() {
delete tail;
};

void print();

void Insert(int da = 0);

void Delete(int da = 0);

void Search(int da = 0);

int getValueAt(int position);

void setValueAt(int position, int da);
};

int List::getValueAt(int position) {
if (p == NULL) {
cout << "The List is Empty!" << endl;
} else {
int posi = 0;
while (p != NULL && posi != position) {
posi++;
p = p->next;
}
if (p == NULL) {
cout << "There is no value of this position in this List!" << endl;
} else {
cout << "In this Position,the value is" << p->data << endl;
}
}
return p->data;
}

void List::setValueAt(int position, int da) {
if (p == NULL) {
cout << "The List is Empty!" << endl;
} else {
int posi = 0;
while (p != NULL && posi != position) {
posi++;
p = p->next;
}
if (p == NULL) {
cout << "There is No Position in this List!" << endl;
} else {
p->data = da;
cout << "The Value in this position has been Updated!" << endl;
}
}
}

void List::Search(int da) {

if (p == NULL) {
cout << "Sorry, The List is Empty!" << endl;
return;
}
int count = 0;
while (p != NULL && p->data != da) {
p = p->next;
count++;
}
cout << "the value you want to search is at position %d" << count << endl;
}

void List::Delete(int da) {
if (p == NULL) {
cout << "Sorry, The List is Empty!" << endl;
return;
}
while (p != NULL && p->data != da) {
q = p;
p = p->next;
}
q->next = p->next;
cout << "The Deletion Operation had been finished!" << endl;
}

void List::Insert(int da) {
head = tail = new Node(da);
tail->next = NULL;
} else {
Node *p = new Node(da);
tail->next = p;
tail = p;
tail->next = NULL;
}

}

void List::print() {
while (p != NULL) {
cout << p->data << " \a";
p = p->next;
}
cout << endl;
}

int main() {
cout << "Hello World!" << endl;
List l1;
l1.Insert(1);
l1.Insert(2);
l1.Insert(3);
l1.Insert(4);
l1.Insert(5);
l1.Insert(6);
l1.Insert(7);
l1.print();
l1.Search(4);
l1.Delete(6);
l1.print();
l1.getValueAt(3);
l1.setValueAt(3, 9);
l1.print();
cout << "The End!" << endl;
return 0;
}

《恋上数据结构第1季》二叉树代码实现
《恋上数据结构第1季》二叉树代码实现
11 0
【数据结构】堆(C++)
【数据结构】堆(C++)
23 0
【数据结构】栈(C++ )
【数据结构】栈(C++ )
17 0
【数据结构】计算器的实现--栈的实战
【数据结构】计算器的实现--栈的实战
21 0
【数据结构】C++用链表实现一个箱子排序附源代码详解
【数据结构】C++用链表实现一个箱子排序附源代码详解
33 0
C++数据类型——链表
C++数据类型——链表
59 0

前面讲解了数组，栈和队列。其实大家回想一下。它们有很多相似的地方。甚至栈和队列这两种数据结构在js中的实现方式也都是基于数组。无论增删的方式、遵循的原则如何，它们都是有序集合的列表。在js中，我们新建一个数组并不需要限定他的大小也就是长度，但是实际上，数组的底层仍旧为初始化的数组设置了一个长度限制。
774 0
【数据结构2】链表
1单链表 1结点定义 2头插法建立单链表 3尾插法建立单链表 4按序号查找表结点 5按值查找表结点 6插入结点操作 7删除结点操作 8合并有序链表 2循环双链表 1结点定义 2插入和删除操作 3循环单链表 4带尾指针的循环单链表 5静态链表 由于顺序表的插入和删除操作需要移动大量元素，影响了效率。
974 0
+关注

java，算法，编程语言相关技术专家
114

0