链表的定义和代码

本文介绍了链表作为线性数据结构的逻辑分类,强调了其在插入和删除操作上的高效性,同时指出链表的查找效率较低且实现相对复杂。内容包括链表的优缺点以及链表定义、插入、删除、统计节点、打印、查找和清空等代码实现。
摘要由CSDN通过智能技术生成

认知链表就需要从他属于的逻辑结构开始说

逻辑结构的分类:

1.集合结构(各个元素间没有关联)。
2.线性结构(数据间存在1对1的关系)。
3.树(数据间存在一对多或多对一的联系)。
4.图(数据间为多对多的关系)。

而链表就属于其中的线性结构,那么我们就需要了解线性结构的优点和缺点从而来帮助我们更好地理解链表的应用环境。

链表的优缺点:
优点:

1.不需要提前分配存储空间,元素个数不受限制
2.对于插入删除操作,在已找到目标位置的前提下,效率很高,仅需处理元素之间的引用关系,时间复杂度为O(1)。

缺点:

1.实现相对复杂
2.查找效率较低,最坏情况下需要遍历整张表
3.由于物理存储位置不固定,需要额外存储数据元素之间的逻辑关系。

代码的实现
链表的定义
#include<bits/stdc++.h>
using namespace std;
struct Node {	//链表中的每个节点都是由两个变量构成的,一个用来存值,一个用来建立与下一个节点之间的联系
	int data;
	Node *next;
};
int main() {
	Node *n1 = new Node();	//新节点的定义
	Node *n2 = new Node();
	Node *n3 = new Node();
	n1 -> data = 1;		//节点的赋值
	n2 -> data = 2;
	n3 -> data = 3;
	n1 -> next = n2;	//建立关联性
	n2 -> next = n3;
	return 0;
}
链表的插入
Node *List = new Node();	//新的头节点
int append (int value) {	//value为插入节点的值
	Node *n = new Node();	//想要插入的节点
	n -> data = value;
	n -> next = NULL;
	Node *p;
	p = List;
	while (p -> next != NULL) {
		p = p -> next;
	}
	p -> next = n;
}
链表的删除
void del (int w) {
	int j = 0;
	Node *p1, *p2;
	p1 = List;
	p2 = List;
	while (++j != w) {
		p1 = p1 -> next;
	}
	j = 0; 
	while (j != w) {
		p2 = p2 -> next;
		++j;
	}
	p1 -> next = p2 -> next;
}
统计节点个数
int count () {
	int num = 0;
	Node *p;
	p = List;
	while (p -> next != NULL) {
		p = p -> next;
		num++;
	}
	return num;
}
链表的打印
void show () {
	Node *p = List;
	while (p != NULL) {
		cout << p -> data << endl;
		p = p -> next;
	}
} 
查找节点
int found(int f) {
	int ans = 0;
	Node *p;
	p = List -> next;
	while (p != NULL) {
		if (f == p -> data) {
			ans++;
			return ans;
		} else {
			ans++;
		}
		p = p -> next;
	}
	return 0;
}
清空链表
void clear() {
	Node *p = new Node();
	Node *q = new Node();
	p = List -> next;
	while (p) {
		q = p -> next;
		free(p);	//逐个释放
		p = q;
	}
	List -> next = NULL;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值