栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构链表插入删除操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构链表插入删除操作

博主终于放假了,博主希望能利用这个寒假能把数据结构好好整理一遍分享给大家;

上次我们说了链表的头指针头结点怎么使用的,今天我们就来谈一谈链表的插入和删除操作;我觉着吧数据结构最重要的一点就是弄清楚原理,然后能自己想着原理把代码敲出来,那么这样你就学明白啦;

接下来,我们开始正题;

我们的链表一般分为两部分,一部分是数据域(存放数据),另一部分是指针域(指向下一个单位)

我们所谓的链表的链表就是通过指针让不同的单位链接在一起;

这里我们我们的单元就称之为一个结点哦!

那我们究竟是怎么插入一个新的单位呢?

见下图:

我们有两个结点一个p;我们想新建一个结点s把它插入其中。

这就需要我们对指针所指的内容进行修改。

我们用malloc函数创建一个新的结点s插入其中;

这时我们先把s->next=p;

然后把p->next=s->next;

            ​

当然我们还需遍历整个链表找到我们需要插入的位置;

怎么遍历?

当然是循环啊!

Status linkInsert(linkList *L,int n,ElemType e)
{
	linkList p,s;
	int j;
	p=*L;
	j=1;
	while(p&&jnext;
	    j++;
	}
	if(!p||j>n)//不满足条件返回0
	{
		return ERROR;
	}
	s=(linkList)malloc(sizeof(Node));
	s->data=e;
	s->next=p->next;//插入链表操作
	p->next=s;
	return OK;
}

这就是我们插入啦

当然前面的说明什么的也要介绍一下

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"

#define OK 1   
#define ERROR 0
#define FALSE 0 

typedef int ElemType; //数据类型

typedef struct Node 
{
	ElemType data;
	struct Node *next;
}Node,*linkList;//在这里面Node不是一个指针类型,linkList是指针类型

typedef int Status;//返回值类型

然后我们来说一说删除操作

当你学会了插入操作其实删除操作就已经学而一半啦

当然我们还是要以图文并茂的形式来解释删除操作;

 我们只需要一步就可以了

p->next=q->next;

不想要它直接把它跳过不就好了嘛!

然后我们来看看代码

Status linkdelete(linkList *L,int n,ElemType *e)
{
	linkList p,q;
	p=*L;
	int j=1;
	while(p->next&&jnext;
		++j;
	}
	if(!(p->next)||j>n)
	{
		return ERROR;
	}
	q=p->next;
	p->next=q->next;
	*e=q->data;
	free(q);
	return OK;
}

这就是我们今天所讲的内容哦

为了照顾广大同学,我当然要把源代码给大家呀!

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"

#define OK 1   
#define ERROR 0
#define FALSE 0 

typedef int ElemType; //数据类型

typedef struct Node 
{
	ElemType data;
	struct Node *next;
}Node,*linkList;//在这里面Node不是一个指针类型,linkList是指针类型

typedef int Status;//返回值类型



void  creat(linkList *L,int n)//为什么要用二重指针//
                              //利用二重指针直接对链表内部进行操作

{
	linkList p;
	int i;
	(*L)=(linkList)malloc(sizeof(Node));//创造一个空间
	(*L)->next=NULL;//结点指针域为null
	for(i=0;idata=i;
		p->next=(*L)->next;
		(*L)->next=p;
	}
}


Status linkInsert(linkList *L,int n,ElemType e)
{
	linkList p,s;
	int j;
	p=*L;
	j=1;
	while(p&&jnext;
	    j++;
	}
	if(!p||j>n)//不满足条件返回0
	{
		return ERROR;
	}
	s=(linkList)malloc(sizeof(Node));
	s->data=e;
	s->next=p->next;//插入链表操作
	p->next=s;
	return OK;
}


Status linkdelete(linkList *L,int n,ElemType *e)
{
	linkList p,q;
	p=*L;
	int j=1;
	while(p->next&&jnext;
		++j;
	}
	if(!(p->next)||j>n)
	{
		return ERROR;
	}
	q=p->next;
	p->next=q->next;
	*e=q->data;
	free(q);
	return OK;
}


void linkprint(linkList L)
{
	linkList p;
	p=L;
	while(p->next!=NULL)
	{	
		p=p->next;
		printf("%d",p->data);
	}
	
}


int main()
{
	linkList L;
	int n=5;
	creat(&L,n);
	linkprint(L);
	printf("n");
	ElemType e;//切记这里不要用指针类型
	ElemType a=5;
	int j=3;

	
	linkInsert(&L,j,a);
	linkprint(L);

	printf("n");

	linkdelete(&L,j+1,&e);
	linkprint(L);

    

	return 0;
}

我们今天讲解的内容就到这里啦!

肖恩会更努力地分享哦!

希望大家能支持肖恩哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685787.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号