C/C++数据结构算法的带头结点的单链表

单链表的带头结点的初始化、创建、插入删除和销毁
欢迎大家与我沟通交流QQ845264718

#include<iostream>




using namespace std;

#define OK 0
#define  ERROR -1
//#define  OVERFLOW -2


typedef int Status;
typedef int ElemType;

//1.设计节点
typedef  struct node
{
	ElemType elem;
	struct node* next;
}Node,*Linknode;

//2.初始化(带头结点的)
Status InitLinklist(Linknode L)
{
	L = (Linknode)malloc(sizeof(node));
	if (!L)
		return ERROR;
	L->next = NULL;
	L->elem = 0;
	return OK;
}

//3.创建一个节点
Linknode New_node(ElemType elem)
{
	Linknode New = (Linknode)malloc(sizeof(node));
	if (!New)
		exit(OVERFLOW);
	New->next = NULL;
	New->elem = elem;
	return New;
}


//4.创建一条链表(尾插创建)
void CreateLinkList(Linknode L)
{
	Linknode tail=L;
	cout << "输入你要创建的链表个数" << endl;
	int n;
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		Linknode New = New_node(i);
		tail->next = New;
		tail = tail->next;

	}
}

//5.头插法
void add_head_Linklist(Linknode L, ElemType e)
{
	Linknode New = New_node(e);
	New->next = L->next;
	L->next = New;
}


//6.尾插法
void add_tail_Linklist(Linknode L, ElemType e)
{
	Linknode tail = L;
	Linknode New = New_node(e);
	while (tail->next != NULL)
	{
		tail = tail->next;
	}
	tail->next = New;
}



//7.链表的删除
Status delLinkList(Linknode L, int i, ElemType *e)
{
	Linknode q,p = L;
	int j = 1;
	while (p && j < i)
	{
		p = p->next;
		++j;
	}
	if (!(p->next) || j > i)
		return ERROR;
	q = p->next;
	p->next = q->next;
	*e = q->elem;
	free(q);
	return OK;
}

//8.链表的插入
Status addLinkList(Linknode L, int i, ElemType e)
{
	Linknode New = New_node(e);
	Linknode p = L;
	int j = 1;
	while (p && j < i)
	{
		p = p->next;
		++j;
	}
	if (!p || j > i)
		return ERROR;
	New->next = p->next;
	p->next = New;
	return OK;

}

//9.删除整个链表
Status ClearLinkList(Linknode L)
{
	Linknode p, q;
	p = L->next;
	while (!p)
	{
		q = p->next;
		free(p);
		p = q;
	}
	L->next = NULL;
	return OK;
}

//打印链表
void show(Linknode L)
{
	if (L->next == NULL)
		cout<<"链表为空"<<endl;
	Linknode p = L->next;
	while (p != NULL)
	{
		cout << p->elem << "\t";
		p = p->next;
	}
	cout << endl;
}





int main()
{
	int e=0;
	node L;
	InitLinklist(&L);
	CreateLinkList(&L);
	show(&L);
	/*add_head_LinkList(&L, 11111);
	show(&L);
	add_tail_LinkList(&L, 9999);
	show(&L);*/
	//addLinkList(&L, 8, 888888);
	/*delLinkList(&L, 6, &e);
	cout << e << endl;*/
	ClearLinkList(&L);
	show(&L);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

困了就喝白茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值