递增顺序表插入

目录

问题描述 

程序设计

运行结果

程序分析

本节文章


问题描述 

【问题描述】

设有递增有序顺序表,实现其插入元素后依然有序。

【输入形式】

第一行输入一个N(N不大于100);

第二行输入N个整数(假设输入序列按照递增顺序,以空格分隔);

第三行输入一个整数M(欲插入数据);

【输出形式】

输出插入M后的顺序表。

【样例输入】

5

12 25 35 98 125

77

【样例输出】

12 25 35 77 98 125

程序设计

#include<stdio.h>
#include<malloc.h>
#define SIZE 10
#define INCREAM 10
typedef struct list{
	int *data;
	int len;
	int size;
}list,*Plist;
int init_list(Plist L){
	L->data=(int *)malloc(sizeof(int)*SIZE);
	L->len=0;
	L->size=SIZE;
	return 1;
}
int creat_list(Plist L,int n){
	int i;
	if(L->len==L->size){
		L->data=(int*)realloc(L->data,(L->size+INCREAM)*sizeof(int));
		L->size+=INCREAM;
	}
	for(i=0;i<n;i++){
		scanf("%d",&L->data[i]);
		L->len++;
	}
	return 1;
}
int insert_sort_list(Plist L,int x){
	int i;
	if(L->len==L->size){
		L->data=(int *)realloc(L->data,(L->size+INCREAM)*sizeof(int));
		L->size+=INCREAM;
	}
	for(i=L->len-1;i>=0&&L->data[i]>x;i--){
		L->data[i+1]=L->data[i];
	}
	L->data[i+1]=x;
	L->len++;
	return 1;
} 
int print_list(Plist L){
	int i;
	for(i=0;i<L->len;i++){
		printf("%d ",L->data[i]);
	}
	printf("\n");
	return 1;
}
int main(){
	int n,x;
	list L;
	scanf("%d",&n);
	init_list(&L);
	creat_list(&L,n);
	scanf("%d",&x);
	insert_sort_list(&L,x);
	print_list(&L);
}

运行结果

程序分析

这是一个使用动态数组实现的插入排序的代码。主要思路是定义一个结构体用来存储动态数组,使用malloc函数初始化数组,并设置数组长度和大小。接下来使用scanf函数读入n个数字,并使用realloc函数对数组进行动态扩展,插入排序将新数字插入到数组中合适的位置。最后使用printf函数输出排序后的结果。

具体函数分析如下:

1. init_list函数:初始化动态数组。

2. creat_list函数:创建动态数组,先判断数组是否已满,若已满则使用realloc函数进行动态扩展。读入用户输入的n个数字,并将长度加1。

3. insert_sort_list函数:插入排序,先判断数组是否已满,若已满则使用realloc函数进行动态扩展。从数组最后一个元素开始往前寻找比插入元素x小的元素,将它们依次向后移动一个位置,最后将x插入到合适的位置,再将长度加1。

4. print_list函数:循环输出数组中的元素。

在主函数中,首先读入n,然后使用init_list函数初始化动态数组,接着使用creat_list函数读入n个数字,并使用insert_sort_list函数将新数字插入到数组中,最后使用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
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Want595

感谢小伙伴的支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值