顺序表——删除设定的MIN,MAX之间的数据
Posted confrontmisery
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表——删除设定的MIN,MAX之间的数据相关的知识,希望对你有一定的参考价值。
问题描述:
顺序表,默认输入递增数列,设定删除区间,删除大于MIN并且小于MAX的数据
基础:visual studio 2017,用cpp写的c
源码呈现:
1 #include <stdio.h>
2 //-----线性表的动态分配顺序存储结构-----
3 #define LIST_INIT_SIZE 20 // 线性表存储空间的初始分配量
4 #define LISTINCREMENT 10 // 线性表存储空间的分配增量
5 typedef struct
6 {
7 int * elem; //存储空间的地址
8 int length; //当前长度
9 int listsize; //当前分配的存储容量
10 }SqList;
11
12 //构造一个空的线性表
13 int InitList_Sq(SqList * L)
14 {
15 L->elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
16 if (! L->elem) return 0; //存储分配失败
17 L->length = 0; //空表长度为0
18 L->listsize = LIST_INIT_SIZE; //初始存储容量
19 return 1;
20 }
21
22 //删除指定区间的数据元素
23 void ListDelete_Sq(SqList * L, int min, int max)
24 {
25 int * i, * j;
26 for (i = L->elem; i < L->elem + L->length; i++)
27 {
28 if ( * i > min && * i < max)
29 {
30 for (j = i; j < L->elem + L->length; j++)
31 * j = * (j + 1);
32 L->length--;
33 i--;
34 }
35 }
36 }
37
38
39 //建立顺序表(默认递增输入)
40 int CreatList_Sq(SqList * L, int n)
41 {
42 int i;
43 L->elem = (int * )malloc(sizeof(int) * LIST_INIT_SIZE);
44 if (! L->elem) return 0 ;
45 else
46 {
47 for (i = 0; i < n; i++)
48 {
49 scanf("%d", &L->elem[i]);
50 L->length++;
51 }
52 }
53 return 1;
54 }
55
56 int main()
57 {
58 SqList L;
59 SqList * LL = &L;
60 InitList_Sq(LL);
61 CreatList_Sq(LL, 10);
62 int *MIN, *MAX, * i;
63 printf("您输入的递增表是:
");
64 for (i = L.elem; i < L.elem + L.length; i++) printf("%d ", *i); //打印顺序表
65 printf("
确定MIN和MAX的值:
");
66 scanf("%d %d", &MIN, &MAX);
67 ListDelete_Sq(LL, MIN, MAX);
68 printf("删除所指定区间后:
");
69 for (i = L.elem; i < L.elem + L.length; i++) printf("%d ", *i); //打印顺序表
70 printf("
此次时间复杂度是:O(n)");
71 free(L.elem);
72 return 0;
73
74 }
以上是关于顺序表——删除设定的MIN,MAX之间的数据的主要内容,如果未能解决你的问题,请参考以下文章