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

本文介绍了如何使用C语言实现顺序表的初始化、插入元素、查找并删除元素以及输出顺序表内容。通过示例输入和输出展示了具体的操作流程,包括动态扩容、元素移动等细节。
摘要由CSDN通过智能技术生成

目录

问题描述

完整代码

程序分析 

运行结果

本节文章


问题描述

【问题描述】

顺序表基础练习,包含初始化顺序表、建立顺序表、插入元素、查找元素、删除元素、输出顺序表中元素方法。

要求使用插入元素方法建立顺序表,通过查询方法找到输入的元素值,并删除第一个等于输入值的元素,最后输出表中元素。

【输入形式】

第一行输入顺序表长度N,

第二行输入N个元素

第三行输入待查找删除的元素。

【输出形式】

输出删除元素后的顺序表。
【样例输入1】

5

10 12 14 18 12

12

【样例输出1】

10 14 18 12

【样例输入2】

3

10 18 12

13

【样例输出2】

10 18 12

完整代码

#include<stdio.h>
#include<malloc.h>
#define SIZE 10
#define INCREAM 10
typedef struct list{
	int *data;
	int len;
	int size;
}list,*plist;
void init_list(plist L){
	L->data=(int *)malloc(SIZE*sizeof(int));
	L->len=0;
	L->size=SIZE;
}
int insert_list(plist L,int i,int e){
	int j;
	if(i>L->len+1||i<1){
		return 0;
	}
	if(L->len==L->size){
		L->data=(int *)realloc(L->data,(L->size+INCREAM)*sizeof(int));
		L->size+=INCREAM;
	}
	for(j=L->len-1;j>=i-1;j--){
		L->data[j+1]=L->data[j];
	}
	L->data[i-1]=e;
	L->len++;
	return 1;
}
int delete_list(plist L,int val){
	int i,j=-1;
	for(i=0;i<L->len;i++){
		if(L->data[i]==val){
			j=i;
			break;
		}
	}
	if(j!=-1){
	    for(i=j;i<L->len;i++){
		    L->data[i]=L->data[i+1];
	    }
	    L->len--;		
	}else{
		return 0;
	}
	return 1;
}
void print_list(plist L){
	int i;
	for(i=0;i<L->len;i++){
		printf("%d ",L->data[i]);
	}
	printf("\n");
}
int main(){
	int n,i,k;
	list p;
	init_list(&p);
	scanf("%d",&n);
	for(i=1;i<=n;i++){            
		int e;
		scanf("%d",&e);
		insert_list(&p,i,e);       //这里我通过插入操作实现顺序表的创建
	}
	scanf("%d",&k);
	delete_list(&p,k);	
	print_list(&p);
} 

程序分析 

1. 第一行包含了两个头文件,分别是<stdio.h>和<malloc.h>,前者包含了输入输出相关的函数,后者包含了动态内存分配相关的函数。
2. 接着定义了常量SIZE和INCREAM,分别表示顺序表的初始容量和每次动态扩容的增加量。
3. 定义了一个结构体list,包含了一个指向int类型的数组data,表示存储数据的数组,一个整型变量len,表示当前顺序表的长度,以及一个整型变量size,表示当前顺序表的容量。
4. 定义了一个plist类型,是指向list结构体的指针类型。
5. init_list函数用于初始化顺序表,即申请SIZE个int类型的动态内存,并将长度和容量初始化为0和SIZE。
6. insert_list函数用于在顺序表的第i个位置插入元素e,若i不在合法范围内则返回0,否则先判断当前容量是否已满,若已满则通过realloc函数动态增加容量,然后将从i-1到len-1的元素后移一个位置,最后在i-1位置插入元素e,并将长度加1,返回1表示插入成功。
7. delete_list函数用于在顺序表中删除值为val的元素,若不存在则返回0,否则从顺序表中找到第一个值为val的元素,将该元素后面的元素依次向前移动一个位置,最后将长度减1,返回1表示删除成功。
8. print_list函数用于遍历顺序表并输出所有元素。
9. 在主函数中,首先读入n表示顺序表中元素个数,然后通过循环读入n个元素,并依次插入到顺序表中。
10. 接着读入k表示要删除的元素值,调用delete_list函数进行删除操作。
11. 最后调用print_list函数输出删除后的顺序表中的所有元素。 

运行结果

本节文章

顺序表
1C语言实现顺序表的插入、删除https://want595.blog.csdn.net/article/details/126967798
2顺序表基本练习-初始化、插入和输出https://want595.blog.csdn.net/article/details/127737121
3顺序表基本练习-删除元素https://want595.blog.csdn.net/article/details/127737165
4顺序表基本操作-查找https://want595.blog.csdn.net/article/details/127737191
5顺序表删除重复元素https://want595.blog.csdn.net/article/details/126998125
6顺序表实现集合并集https://want595.blog.csdn.net/article/details/127737454
7顺序表元素循环左移(new)https://want595.blog.csdn.net/article/details/128281975
8删除顺序表中最小值https://want595.blog.csdn.net/article/details/126984319
9递增顺序表插入https://want595.blog.csdn.net/article/details/126990708
10将顺序表非零元素依次移到表的前端https://want595.blog.csdn.net/article/details/127737349
11删除顺序表中第一个值等于x的元素https://want595.blog.csdn.net/article/details/127619864
12在顺序表中,输入一个元素插入到原表的最小元素之前https://want595.blog.csdn.net/article/details/127365247
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Want595

感谢小伙伴的支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值