单链表操作元素为整型的实现增加,删除,查找,修改。
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;
运行结果:
以上是关于单链表操作元素为整型的实现增加,删除,查找,修改。的主要内容,如果未能解决你的问题,请参考以下文章