顺序表——删除设定的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("您输入的递增表是:\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 }

猜你喜欢

转载自www.cnblogs.com/confrontmisery/p/12423718.html