顺序表的基本操作(二)——沐雨先生

该博客介绍了如何使用C语言实现顺序表的删除操作,包括一个高效的时间复杂度为O(n)的ListDel_Sq函数,用于从指定位置开始删除多个元素。博主通过创建、初始化、输入和输出顺序表,展示了函数的使用,并提醒了编程时的注意事项,如大小写敏感和代码规范。
摘要由CSDN通过智能技术生成

提示:C语言,数据结构

目录

  1. 掌握顺序表的结构特点。
  2. 主要掌握顺序表的插入和删除算法。
  3. 学会分析算法的时间复杂度。

二、实验内容

已知顺序表L,从第i个元素起(包括第i个 )连续删除k个元素。

       A、在上边的程序(main函数的上边),增加编写一个函数,例如:

             int ListDel_Sq(SqList *L,int i,int k){

             /*顺序表L,从第i个元素起连续删除k个元素。

             删除成功返回1,否则返回0,如果i或k不合理,那么一个元素也不删除。*/

             ……

             }//本算法可参考教材算法2.5

       B、扩充上边主函数(main) 对初始的顺序表L(含n个数)调用ListDel_Sq(&L,2,3)函数,表               示从L中第2个元素起连续删除3个数,并输出调用ListDel_Sq后的L中的各个元素的值。

      提示:ListDel_Sq这个函数如果是高效的,那么它的时间复杂度应为O(n),如果时间复杂度为                     O(n2),那么需要对算法进行改进。

三、源程序

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define	ERROR 0
#define OVERFLOW -2

#define LIST_INIT_SIZE 100//
#define LISTINCREMENT 10
typedef int Status;
typedef struct{
	int *elem;
	int length;
	int listsize;
}SqList;//声明

Status InitList_Sq(SqList *L){
	L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));//
	if(!L->elem) exit(OVERFLOW);
	L->length=0;
	L->listsize=LIST_INIT_SIZE;
	return OK;
}//建表  时间复杂度O(1)

void CreateList(SqList *L,int n)//创建顺序表,含有n个数据元素
{	
	int i;
	if(n<0 || n>LIST_INIT_SIZE) return;
	printf("请为顺序表输入%d个整数:\n",n);
	for(i=0;i<n;i++)
		scanf("%d",&L->elem[i]);
	L->length=n;
}//输入

void PrintList(SqList L){//输出顺序表中的数据
	int i;
	printf("顺序表中的数据依次为:\n");
	for(i=0;i<L.length;i++)
		printf("%d ",L.elem[i]);
	printf("\n");
}//输出

Status ListDel_Sq(SqList *L,int i,int k){
	int j;
	if(i<1 || i>L->length) return ERROR;
	for(j=i;j+k<=L->length;j++) L->elem[j-1]=L->elem[j-1+k];
	L->length-=k;
	return OK;
}//从第i个元素起删除k个元素



void main(){
	SqList L;
	InitList_Sq(&L);//初始化顺序表L
	CreateList(&L,5);//检查输入是否有误
	PrintList(L);
	ListDel_Sq(&L,2,2);	
	PrintList(L);
	free(L.elem);
}

四、运行示例

五、总结

  1. 在输入或者书写代码时切记切记切记大小写的区分,养成规范良好的习惯,上下文保持一致,多注意上文所定义的函数名。
  2. 边写边思考,快速思考,养成条件反射,对代码要有感觉。
  3. 新建文件时选择.cpp文件,.c文件局限大,有很多代码执行不起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沐雨先生

如果真的帮助到你了再打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值