C++之STL—List 链表

双向链表


链表的组成:链表由一系列**结点**组成

结点的组成:一个是存储数据元素的**数据域**,另一个是存储下一个结点地址的**指针域**

STL中的链表是一个双向循环链表

 

构造函数

List 赋值和交换

 

 容器大小操作


- 判断是否为空   --- empty
- 返回元素个数   --- size
- 重新指定个数   --- resize

 

插入和删除


* 尾插   --- push_back
* 尾删   --- pop_back
* 头插   --- push_front
* 头删   --- pop_front
* 插入   --- insert
* 删除   --- erase
* 移除   --- remove
* 清空   --- clear

数据存取

 list <int > li;

 li.front();        //第一个元素

 li.back();      //最后一个元素

反转和排序

 

自定义排序案例,变量为类class

 

#include <list>
#include <string>
class Person {
public:
	Person(string name, int age , int height) {
		m_Name = name;
		m_Age = age;
		m_Height = height;
	}

public:
	string m_Name;  //姓名
	int m_Age;      //年龄
	int m_Height;   //身高
};


bool ComparePerson(Person& p1, Person& p2) {

//降序
	if (p1.m_Age == p2.m_Age) {
		return p1.m_Height  > p2.m_Height;
	}
	else
	{
	//升序
		return  p1.m_Age < p2.m_Age;
	}

}

void test01() {

	list<Person> L;

	Person p1("刘备", 35 , 175);
	Person p2("曹操", 45 , 180);
	Person p3("孙权", 40 , 170);
	Person p4("赵云", 25 , 190);
	Person p5("张飞", 35 , 160);
	Person p6("关羽", 35 , 200);

	L.push_back(p1);
	L.push_back(p2);
	L.push_back(p3);
	L.push_back(p4);
	L.push_back(p5);
	L.push_back(p6);

	for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
		cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age 
              << " 身高: " << it->m_Height << endl;
	}

	cout << "---------------------------------" << endl;
	L.sort(ComparePerson); //排序

	for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
		cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age 
              << " 身高: " << it->m_Height << endl;
	}
}

int main() {

	test01();

	system("pause");

	return 0;
}
C++STL(Standard Template Library)中没有提供循环链表(circular linked list)的标准容器。STL提供了其他常用的容器,如vector、list、deque等,但没有直接支持循环链表。 如果你需要使用循环链表,可以自己实现或使用第三方库。循环链表是一种链表的变体,它的最后一个节点指向第一个节点,形成一个闭环。你可以通过定义一个节点结构体或类来表示链表的节点,然后使用指针将它们连接起来。 以下是一个简单的循环链表的示例代码: ```cpp #include <iostream> struct Node { int data; Node* next; }; class CircularLinkedList { private: Node* head; public: CircularLinkedList() { head = nullptr; } void insert(int value) { Node* newNode = new Node; newNode->data = value; if (head == nullptr) { head = newNode; newNode->next = head; } else { Node* temp = head; while (temp->next != head) { temp = temp->next; } temp->next = newNode; newNode->next = head; } } void display() { if (head == nullptr) { std::cout << "Circular Linked List is empty." << std::endl; return; } Node* temp = head; do { std::cout << temp->data << " "; temp = temp->next; } while (temp != head); std::cout << std::endl; } }; int main() { CircularLinkedList cll; cll.insert(1); cll.insert(2); cll.insert(3); cll.display(); return 0; } ``` 上述代码定义了一个循环链表类`CircularLinkedList`,其中包含了插入节点和显示链表内容的方法。在`main`函数中,我们创建了一个循环链表对象`cll`,并插入了三个节点,然后调用`display`方法显示链表内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值