单链表操作元素为整型的实现增加,删除,查找,修改。

Posted 新时代键盘上的农民工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表操作元素为整型的实现增加,删除,查找,修改。相关的知识,希望对你有一定的参考价值。

单链表操作元素为整型,实现 增加,删除,查找,修改。
源代码如下:

/*
* author:xwq
*date:2021/9/28  10:00
* description:实现单链表的初始化,增删查改
* 首节点为 0,首元节点(即一个元素的节点)为 1
*/

#include<stdio.h>
#include<string>
#include <malloc.h>
#pragma warning(disable:4996)

typedef struct LNode {
	int data;
	struct LNode* next;

}LNode, * Linklist;


//初始化 引用
//int InitLink1(Linklist& L);
int InitLink2(Linklist* LL);
//插入操作
int InsertLink1(Linklist LL, int& i, int& e);
//插入操作(舍去)
Linklist* InsertLink2(Linklist* LL, int& i, int& e);
//删除某个节点
int DeleteLnote(Linklist L, int& i);
//查找某个节点的值
int Search(Linklist L, int& i);
//修改第i个元素的值
int UpdateLinknote(Linklist L, int i, int* e);
//打印链表
int PrintLink(Linklist L);


int main(void)
{
	int result=0,e,number,position;
	Linklist L=NULL;

	printf("单链表初始化结果:");
	result=InitLink2(&L);
	if (result) printf("初始化成功!!!\\n");
	else   printf("初始化失败!!!\\n");

	printf("请输入插入元素的个数:");
	scanf("%d",&number);
	printf("请输入插入的元素,用空格隔开:");
	for (int i = 1; i <= number; i++)
	{
		scanf("%d",&e);
		InsertLink1(L, i, e);

	}

	printf("打印插入元素后的单链表;");
	PrintLink(L);

	printf("请输入要查找单链表中元素的位置;");
	scanf("%d",&position);
	Search(L, position);

	printf("请输入要修改元素的位置和修改后元素的值:");
	scanf("%d %d",&position,&e);
	result=UpdateLinknote(L, position, &e);
	if (result)
	{
		printf("修改后的结果:修改成功\\n");
	}
	else  printf("修改后的结果;修改失败\\n");
	printf("打印修改元素后的单链表:");
	PrintLink(L);

	printf("请输入需要删除节点的位置;");
	scanf("%d",&position);
	DeleteLnote(L,position);

	printf("打印删除元素后的单链表;");
	PrintLink(L);
	return 0;

}

//初始化 引用
int InitLink1(Linklist& L) {
	/*printf("L的地址:%p\\n", L);*/
	LNode* head = (LNode*)malloc(sizeof(LNode));
	if (!head)
	{
		printf("内存不足,分配失败.\\n");
	}
	head->next = NULL;
	L = head;
	/*printf("head的地址:%p\\n",head);
	printf("L的地址:%p\\n",L);*/
	return 1;

}

//指针的指针
int InitLink2(Linklist* LL) {
	/*printf("LL的地址:%p\\n", LL);*/
	LNode* head = (LNode*)malloc(sizeof(LNode));
	if (!head)
	{
		printf("内存不足,分配失败.\\n");
	}
	head->next = NULL;
	*LL = head;
	//printf("head的地址:%p\\n", head);
	//printf("LL的地址:%p\\n", *LL);
	return 1;

}


//插入操作
int InsertLink1(Linklist LL, int& i, int& e)
{
	if (i < 1)
	{
		printf("位置输入错误\\n");
		return 0;
	}
	if (e == NULL)
	{
		printf("插入的元素为空");
	}
	Linklist p = LL;
	int k = 0;
	while ((p != NULL) && k < i - 1)
	{
		p = p->next;
		k++;
	}
	LNode* temp = (LNode*)malloc(sizeof(LNode));
	temp->data = e;
	temp->next = p->next;
	p->next = temp;
	return 1;
}

//插入操作(舍去)
Linklist* InsertLink2(Linklist* LL, int& i, int& e)
{
	if (i < 1)
	{
		printf("位置输入错误\\n");
		return 0;
	}
	if (e == NULL)
	{
		printf("插入的元素为空");
	}
	Linklist* p = LL;
	int k = 0;
	while ((*p != NULL) && k < i - 1)
	{
		*p = (*p)->next;
		k++;
	}
	LNode* temp = (LNode*)malloc(sizeof(LNode));
	temp->data = e;
	temp->next = (*p)->next;
	(*p)->next = temp;
	return p;
}


//查找某个节点的值

int Search(Linklist L, int& i)
{
	if (i < 1) return 0;
	else
	{
		Linklist p = L->next;
		int k = 0;
		while (p != NULL && k < i - 1)
		{
			p = p->next;
			k++;

		}
		if (p == NULL) { printf("查找的结果:超过表长\\n"); return 0; }
		printf("查找的结果:第%d个元素是%3d\\n", i, p->data);
	}
	return 1;
}

//删除某个节点
int DeleteLnote(Linklist L, int& i)
{
	if (i < 1)
	{
		printf("删除节点位置输入错误\\n");

	}
	Linklist p = L;
	int k = 0;
	while (p != NULL && k < i - 1)
	{
		p = p->next;
		k++;

	}
	if (p == NULL)
	{
		printf("超过了表长\\n");
		return 0;
	}
	Linklist temp = p->next;
	p->next = p->next->next;
	free(temp);
	return 1;
}

//修改第i个元素的值
int UpdateLinknote(Linklist L, int i, int* e)
{
	if (i < 1)
	{
		printf("修改元素的位置输入不合法,应该输入>1的位置\\n");
	}
	Linklist p = L;
	int k = 0;
	while (p != NULL && k < i)
	{
		p = p->next;
		k++;

	}
	if (p == NULL) return 0;
	memcpy(&p->data, e, sizeof(int));
	return 1;
}



//打印链表
int PrintLink(Linklist L)
{
	if (L == NULL)
	{
		printf("空表\\n");
		return 0;
	}
	Linklist p = L->next;
	while (p != NULL)
	{

		printf("%-5d", p->data);
		p = p->next;
	}
	printf("\\n");
	return 1;
}

运行结果:

以上是关于单链表操作元素为整型的实现增加,删除,查找,修改。的主要内容,如果未能解决你的问题,请参考以下文章

单链表操作元素为整型的实现增加,删除,查找,修改。

单链表操作元素为整型的实现增加,删除,查找,修改。

单链表操作元素为结构体,实现增加,删除,查找,修改。

单链表操作元素为结构体,实现增加,删除,查找,修改。

单链表操作元素为结构体,实现增加,删除,查找,修改。

单链表操作元素为结构体,实现增加,删除,查找,修改。