17 5.无序表中删除值在s和t之间元素

p17 5无序表中删除值在s和t之间元素(包括s和t)

c 复制代码
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct {
	int* data;
	int capacity;
	int length;
}SeqList;


int InitList(SeqList &L) {
	L.data = (int*)malloc(MaxSize * sizeof(int));
	L.capacity = MaxSize;
	L.length = 0;
	return 1;
}
int CreateList(SeqList &L, int n) {
	int i;
	for (i = 0; i < n; i++) {
		scanf_s("%d", &L.data[i]);
		
	}
	L.length = n;
	return 1;
}
int ListDelete(SeqList& L,int i,int &e) {
	if (i > L.length || i < 0) {
		return 0;
	}
	e = L.data[i - 1];
	for (int j= i; j<L.length; j++) {
		L.data[j - 1] = L.data[j];
	}
	L.length--;
}
int ListInsert(SeqList &L, int i, int e) {
	if (i > L.length+1 || i < 0) {
		return 0;
	}
	for (int j = L.length; j >= i; j--) {
		L.data[j] = L.data[j - 1];
		
	}
	L.data[i - 1] = e;
	L.length++;
	return 1;
}
int LocateElem(SeqList& L, int e) {
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] == e) {
			return i + 1;
		}
	}
}
void PrintList(SeqList L) {
	for (int i = 0; i < L.length; i++) {
		printf("%d ", L.data[i]);
	}
	printf("\n");
}
int DeleteMin(SeqList &L) {
	int m = 100000, locate;
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] < m) {
			m = L.data[i];
			locate = i;
		}
	}	
	printf("%d  %d\n",m, locate);
	L.data[locate] = L.data[L.length-1];	
	return m;
}
void Deletefrom(SeqList &L,int s,int t) {
	if (s > t || s<0 || t>L.length - 1)
		exit(-1);
	int c = t - s;
	for (int i = t; i <L.length; i++) {
		L.data[i - c] = L.data[i];
	}
	L.length = L.length- c-1;
}
//有序表,所以找到第一个大于t的元素下标,第一个大于等于s的元素下标
void DeleteBetween(SeqList& L, int s, int t) {
	if (s >= t ||L.length==0)
		exit(-1);
	int i, j;
	for (i=0;i<L.length&&L.data[i] < s; i++);
	for (j=i; j < L.length && L.data[j] <= t; j++);
	for (; j< L.length; j++,i++) {
		L.data[i] = L.data[j];
	}
	L.length = i;
}
//无序表
void Del_s_t(SeqList& L,int s,int t) {//删除顺序表中值在s和t之间的元素,用k记录值在s和t中元素的个数
	int k = 0;
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] >= s && L.data[i] <= t) {
			k++;
		}
		else {
			L.data[i - k] = L.data[i];
		}
	}
	L.length = L.length - k;
}
int main() {
	
	int n;
	scanf_s("%d", &n);
	SeqList L;
	InitList(L);
	CreateList(L,n);
	PrintList(L);
	int s, t;
	scanf_s("%d%d", &s, &t);
	Del_s_t(L, s, t);
	PrintList(L);
	return 0;
}
相关推荐
qqxhb3 分钟前
零基础数据结构与算法——第四章:基础算法-排序(中)
数据结构·算法·排序算法·归并·快排·堆排
kyle~36 分钟前
C/C++字面量
java·c语言·c++
蜡笔小电芯1 小时前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习
Y1nhl1 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
qq_401700412 小时前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
CoovallyAIHub2 小时前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
闻缺陷则喜何志丹2 小时前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
今天背单词了吗9803 小时前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
手握风云-3 小时前
优选算法的链脉之韵:链表专题
数据结构·算法·链表