服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现顺序表的插入删除

C语言实现顺序表的插入删除

2022-12-01 14:12菜鸡萝卜 C/C++

这篇文章主要介绍了C语言实现顺序表的插入删除,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

首先声明一个顺序表的结构 (数组的第一个元素是0,但是顺序表的第一个一般 从1(人为设定)开始)

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10
#define OK	  1
#define FALSE 0 

typedef int Elemtype;
typedef bool Status;

typedef struct list
{
	Elemtype *elem;
	int len;        //数据个数
	int listsize;   //顺序表长度
}List;
  • listsize 代表这个顺序表的最大容量,可以随时扩容
  • len 代表在你创建的这个顺序表中有几个有效的数据,总是小于等于listsize

C语言实现顺序表的插入删除

 

一、初始化顺序表属性

void list_init(List *L)
{
	L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间
	if(L->elem==NULL)//判断空间是否开辟成功
	{
		printf("malloc fail\n");
		exit(0);
	}

	L->len=0;	//初始化数据有效数据为0
	L->listsize=MAXSIZE;	//初始化数组长度为MAXSIZE
}

 

二、顺序表的插入

Status list_insert(List *L,int i,Elemtype data)
{
	Elemtype *base,*insert,*p;
	if(i<1 || i>L->len+1 || L==NULL)
	{
		printf("位置输入错误\n");
		return FALSE;
	}
	if(L->len > L->listsize)
	{
		base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));//动态扩容
		L->elem=base;
		L->listsize+=MAXSIZE;//更新顺序表大小
	}
	insert=&(L->elem[i-1]);//目标指针指向要插入的目标地址
	  //指向最后一个元素的地址
	for(p=L->elem + L->len-1;p>=insert;p--)
	{
		*(p+1)=*p;
	}
	*insert=data;
	L->len++;
	return OK;
}

C语言实现顺序表的插入删除

 

三、删除

Status delete_list(List *L,int i)
{
	ElemType *q,*delete_i;
	if(L==NULL||i<0||i>L->len)
	return FALSE;
	delete_i=&(L->elem[i-1]);//用指针指向要删除位置的地址
	q=L->elem + L->len-1;    //q指针指向顺序表最后一个位置的地址   首地址加上数组长度就是最后一个元素地址
	for(delete_i=delete_i+1;delete_i<=q;++delete_i)//从删除位置的地址的下一个元素开始,每个往前移动一位
	{
		*(delete_i-1)=*delete_i;		//前一个位置等于后一个
	}
	L->len--;
	
	return OK;
}

C语言实现顺序表的插入删除

全部程序

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10
#define OK	  1
#define FALSE 0 

typedef int Elemtype;
typedef bool Status;

typedef struct list
{
	Elemtype *elem;
	int len;
	int listsize;
}List;


void list_init(List *L)
{
	L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间
	if(L->elem==NULL)//判断空间是否开辟成功
	{
		printf("malloc fail\n");
		exit(0);
	}

	L->len=0;	//初始化数据有效数据为0
	L->listsize=MAXSIZE;	//初始化数组长度为MAXSIZE
}

Status list_insert(List *L,int i,Elemtype data)
{
	Elemtype *base,*insert,*p;
	if(i<1 || i>L->len+1 || L==NULL)
	{
		printf("位置输入错误\n");
		return FALSE;
	}
	if(L->len > L->listsize)
	{
		base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));
		L->elem=base;
		L->listsize+=MAXSIZE;
	}
	insert=&(L->elem[i-1]);//目标指针指向要插入的目标地址
	  //指向最后一个元素的地址
	for(p=L->elem + L->len-1;p>=insert;p--)
	{
		*(p+1)=*p;
	}
	*insert=data;
	L->len++;
	return OK;
}

Status list_delete(List *L,int i)
{
	Elemtype *aim,*p;
	if(i<0 || i>L->len)
	{
		printf("位置输入错误\n");
		return FALSE;
	}
	aim=&(L->elem[i-1]);//目标指针指向要删除的目标地址
	p=(L->elem+L->len-1); //指向最后一个元素的地址
	for(aim=aim+1;aim<=p;++aim) //目标地址滑动删除
	{
		*(aim-1)=*aim;
	}
	L->len--;
	return OK;
}
void show_list(List *L)
{
	int i;
	for(i=0;i<L->len;i++)
	{
		printf("elem[%d]=%d\n",i+1,L->elem[i]);
	}
	printf("\n");
}
int main()
{
	int i;
	List L;
	list_init(&L);
	for(i=0;i<10;i++)
	{
		list_insert(&L,i+1,i+1);
	}
	printf("插入前的顺序表\n");
	show_list(&L);

	printf("插入后的顺序表  在5位置插入99\n");
	list_insert(&L,5,99);
	show_list(&L);

	printf("删除后的顺序表  把5位置删除\n");
	list_delete(&L,5);
	show_list(&L);
	return 0;
}

运行结果如下

C语言实现顺序表的插入删除

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_34991245/article/details/82695372

延伸 · 阅读

精彩推荐
  • C/C++c语言 字符串的拼接和分割实例

    c语言 字符串的拼接和分割实例

    今天小编就为大家分享一篇c语言 字符串的拼接和分割实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    qy的博客7322021-08-10
  • C/C++数据结构 栈的操作实例详解

    数据结构 栈的操作实例详解

    这篇文章主要介绍了数据结构 顺序栈的定义、初始化、空栈判断、入栈、出栈操作的相关资料,需要的朋友可以参考下...

    xpleaf5432021-05-20
  • C/C++C++模板以及实现vector实例详解

    C++模板以及实现vector实例详解

    模板是为了实现泛型编程,所谓泛型编程,就是指编写与类型无关的代码,下面这篇文章主要给大家介绍了关于C++模板以及实现vector的相关资料,需要的朋友可以...

    ~怎么回事啊~3682022-02-24
  • C/C++举例讲解C语言程序中对二叉树数据结构的各种遍历方式

    举例讲解C语言程序中对二叉树数据结构的各种遍历方式

    这篇文章主要介绍了举例讲解C语言程序中对二叉树数据结构的各种遍历方式,先序中序后序二叉树遍历几乎成了最老生常谈的数据结构基础知识,的朋友可以...

    cqnuztq4212021-03-29
  • C/C++c++递归解数独方法示例

    c++递归解数独方法示例

    这篇文章主要介绍了c++递归解数独方法示例,需要的朋友可以参考下...

    C++教程网8652021-01-18
  • C/C++C++实现合并排序的方法

    C++实现合并排序的方法

    这篇文章主要介绍了C++实现合并排序的方法,实例分析了合并排序的原理与相关实现技巧,需要的朋友可以参考下...

    Jack_Wong20105392021-03-04
  • C/C++详解C语言进程同步机制

    详解C语言进程同步机制

    这篇文章主要介绍了详解C语言进程同步机制的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    李子树_6292021-09-10
  • C/C++C语言实现快速排序改进版

    C语言实现快速排序改进版

    这篇文章主要为大家详细介绍了C语言实现快速排序的改进代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    我站在桥上看风景6722021-06-30