问题描述:
顺序表,默认输入递增数列,设定删除区间,删除大于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("您输入的递增表是:\n"); 64 for (i = L.elem; i < L.elem + L.length; i++) printf("%d ", *i); //打印顺序表 65 printf("\n确定MIN和MAX的值:\n"); 66 scanf("%d %d", &MIN, &MAX); 67 ListDelete_Sq(LL, MIN, MAX); 68 printf("删除所指定区间后:\n"); 69 for (i = L.elem; i < L.elem + L.length; i++) printf("%d ", *i); //打印顺序表 70 printf("\n此次时间复杂度是:O(n)"); 71 free(L.elem); 72 return 0; 73 74 }