题目来源于王道2018数据结构考研复习指导线性表的综合练习
编译环境:VS2015
题目:从有序顺序表中删除其值在给定值s和t之间(要求s<t)的所有元素,如果s、t不合理或者顺序表为空则显示出错信息并退出运行。
具体实现如下:
#include<stdio.h> #include<stdlib.h> #define initSize 50 typedef int ElementType; typedef struct { ElementType *data; int length; int maxSize; }SeqList; //初始化线性表 void InitList(SeqList &L) { L.data = (ElementType*)malloc(sizeof(ElementType)*initSize); L.length = 0; L.maxSize = initSize; } //创建有序表 void CreateList(SeqList &L, int n) { L.length = n; for (int i = 0;i < L.length;i++) { scanf_s("%d", &(L.data[i])); } } //删除定值s和t之间(要求s<t)的所有元素 bool DeleteS_T(SeqList &L, int s, int t) { int m=0, n=0;//m记录小于s的元素的个数,n记录大于t的元素的个数。 //判断合理性 if ((s >= t) || (L.length == 0)) return -1; //如果最后得到的顺序表需要包括边界值s、t,if条件注意加等号 for (int i = 0;i < L.length;i++) { if (L.data[i] < s) { L.data[m] = L.data[i]; m++; } } n = m;//题目要求的顺序表是有序的,所以找大于t的数直接从下标为m的开始找即可 for (int j = m;j < L.length;j++) { if (L.data[j] >t) { L.data[n] = L.data[j]; n++; } } L.length = n; return true; } //显示 void ShowList(SeqList L) { for (int i = 0; i < L.length; i++){ printf_s("%d ",L.data[i]); } } int main() { SeqList L; int length, s,t; InitList(L); printf_s("输入表的长度:"); scanf_s("%d", &length); printf_s(" 输入初始值:"); CreateList(L, length); printf_s("输入要删除的数字范围区间:"); scanf_s("%d %d", &s,&t); DeleteS_T(L, s,t); printf_s(" 删除后的顺序表的元素如下:"); ShowList(L); printf_s(" "); system("pause"); return 0; }
测试结果: