2.数据结构-单链表

1.单向链表

1.1 链表的结构体

单向链表中: 指针域存放的是下一个链表的地址,所以用 struct LinkNode * next

1.2 链表的初始化

 注意:void *是指针,代指任意的数据类型的指针

1.3 插入新元素

 

pCurrent 是链表的地址 mylist是一个指针,mylist->pHeader 是头链表,&mylist->pHeader 是头链表的地址。

1.4 链表的遍历

pCurrent 是指针,指向第一个有数据的节点的地址。

在C语言中,函数名就是函数的首地址,所以将函数作为函数参数的思路是将函数地址传入,形参是一个指针类型的变量,形参的基类型为函数原型。

1.5 链表节点的删除

(1)按照节点位置删除

(2)按照值删除

 1.6 链表的清空和销毁

 

#include<iostream>

using namespace std;
//创建链表结构
//template<class T1>
class linknode {
public:
	int data;
	linknode* next;
};
//创建单向链表类
//template<class T1>
class linklist {
public:
	linknode* Header;
	int m_size;
public:
	//无参构造
	linklist() {
		Header = NULL;
		m_size = 0;
	}
	//初始化链表
	void link_init() {
		Header = new linknode; 
	}
	//打印链表
	void printlist() {
		linknode* current = Header->next;
		for (int i = 0; i < m_size; i++) {
			cout << current->data<<" ";
			current = current->next;
		}
		cout << endl;
	}
	//尾插链表
	void push_back(int data) {
		linknode* list = Header;
		linknode* current = new linknode;

		for (int i = 0; i <m_size ;i++) {
			list = list->next;
		}
		current->data = data;
		list->next = current;
		m_size++;
	}
	//按照节点位置插入
	void my_insert(int pos ,int data) {
		linknode* pre_list = Header;
		linknode* current = new linknode;
		for (int i = 0; i < pos; i++) {
			pre_list = pre_list->next;
		}
		current->data = data;
		current->next = pre_list->next;
		pre_list->next = current;
		m_size++;
	}
	//删除固定位置的节点
	void my_delete(int pos) {
		linknode* pre_list = Header;
		linknode* current ;
		for (int i = 0; i < pos; i++) {
			pre_list = pre_list->next;
		}
		current = pre_list->next;
		pre_list->next = current->next;
		delete(current);
		m_size--;
	}
};


class person {
public:
	person(string name, int age) {
		this->m_name = name;
		this->m_age = age;
	}
	string m_name;
	int m_age;
};



int main() {
	linklist list1 ;
	list1.link_init();
	person p1("zhangsan", 10);
	list1.push_back(1);
	list1.push_back(2);
	list1.push_back(3);
	list1.printlist();
	list1.my_insert(2, 100);
	list1.printlist();
	list1.my_delete(2);
	list1.printlist();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋进在AI路上的小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值