数据结构之链表(一)创建,插入,删除

本文介绍了链表作为一种基本的数据结构,其灵活性和广泛应用。特别是在处理映射关系时,链表表现出高效和便捷的特点。文章将探讨如何创建、插入和删除链表节点,特别提到了论坛拉链结构作为链表应用的一个实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表是一种十分常见的数据结构,也是非常灵活的一种数据结构,应用十分广阔,在实际工作会经常用到,尤其保存映射关系时非常方便和灵活,经典的论坛拉链结构就是一种高效的和灵活的链表结构。

#include<iostream>
using namespace std;

struct node
{
	int element;
	node *next;
};

//创建长度为N的链表
node *create_list(int n)
{
	if(n <= 0)
	{
		return  NULL;
	}
	
	node *head = NULL;
	node *p = new node;
	if(p == NULL)
	{
		return NULL;
	}
	head = p;
	while(--n)
	{
		node *q = new node;
		if(q == NULL)
		{
			return NULL;
		}
		p->next = q;
		p = q;
	}
	p->next = NULL;

	return head;
}
//求出链表的长度
int list_length(const node* head)
{
	int len = 0;
	const node *p = NULL;
	p = head;
	while(p != NULL)
	{
		len++;
		p = p->next;
	}
	
	return len;
}

//在第I个节点前面插入新的节点
bool insert_element(node* &head, int i, const int& element)
{
	node *p = head;
	int j = 0;

	if(i == 1)
	{
		node *h = NULL;
		h = new node;
		if(h == NULL)
		{
			return false;
		}
		else
		{
			h->element = element;
			h->next = head;
			head = h;
			return true;
		}
	}

	while(p != NULL && j < i-2)
	{
		p = p->next;
		j++;
	}

	if(p != NULL && j <= i-2)
	{
		node *new_node = new node;
		if(new_node == NULL)
		{
			return false;
		}
		else
		{
			new_node->element = element;
			new_node->next = p->next;
			p->next = new_node;
			return true;
		}
	}
	
	return false;
	
}

//删除第i个节点
bool del_element(node* &head, int i)
{
	if(i < 1)
	{
		return false;
	}
	else if(i == 1)
	{
		node *h = head;
		head = head->next;
		delete h;
		return true;
	}
	else
	{
		int j = 0;
		node *p = NULL;
		node *t = NULL;
		p = head;
		while(p != NULL && j < i-1)
		{
			t = p;
			p = p->next;
			j++;
		}

		if(p != NULL && j <= i-1)
		{
			t->next = p->next;
			delete p;
			return true;
		}
		
		return false;
	}
}

int main()
{
	int n = 10;
	node *head = create_list(n);
	node *p = head;
	int i = 0;
	while(p != NULL)
	{
		p->element = i++;
		p = p->next;
	}

	int e = 100;
	if(insert_element(head, 11, e))
	{
		del_element(head, 1);
		del_element(head, 5);
		del_element(head, 9);
		p = head;
		while(p != NULL )
		{
			cout<<p->element<<' ';
			p = p->next;
		}

	}

	return  0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值