题目描述
建立顺序表L,将指定区间的数据从顺序表中删除。假设指定区间是合法数据,无序做合法性判断。测试数据为整型。
输入
第一行是表长n;第二行是表中数据元素;第三行是闭区间。
输出
删除以后的顺序表中的数据元素。
样例输入
10
22 32 11 23 43 59 17 65 45 57
10 20
样例输出
22 32 23 43 59 65 45 57
#include<malloc.h>
#include<iostream>
using namespace std;
typedef struct
{
int data[100];
int length;
}SqList;
void InitList(SqList *&L)
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
void CreatList (SqList *&L)
{
int k;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>L->data[i];
}
}
void sort(SqList *&L,SqList *&L1)
{
int n,m,p=0;
cin>>n>>m;
for(int i=0;i<L->length;i++)
{
if(L->data[i]>=n&&L->data[i]<=m)
{
continue;
}
L1->data[p]=L->data[i];
p++;
}
}
void DisList(SqList *&L1)
{
for(int i=0;i<L1->length;i++)
{
cout<<L1->data[i]<<" ";
}
}
int main()
{
SqList *L,*L1;
InitList(L);
InitList(L1);
CreatList(L);
sort(L,L1);
DisList(L1);
return 0;
}
在创建和复制链表的时候你没有调整链表的长度length这个变量,在运行过程中他一直是0
修改处见注释,供参考:
#include<malloc.h>
#include<iostream>
using namespace std;
typedef struct
{
int data[100];
int length;
}SqList;
void InitList(SqList*& L)
{
L = (SqList*)malloc(sizeof(SqList));
L->length = 0;
}
void CreatList(SqList*& L)
{
int k;
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> L->data[i];
L->length++; //修改
}
}
void sort(SqList*& L)//, SqList*& L1)
{
int n, m, p = 0;
cin >> n >> m;
for (int i = 0; i < L->length; i++)
{
if (L->data[i] >= n && L->data[i] <= m)
{
continue;
}
L->data[p] = L->data[i]; //修改
p++;
}
L->length = p; //修改
}
void DisList(SqList* L) //修改
{
for (int i = 0; i < L->length; i++) //修改
{
cout << L->data[i] << " "; //修改
}
}
int main()
{
SqList* L; //* L1;InitList(L1);
InitList(L);
CreatList(L);
sort(L); //, L1);
DisList(L); //DisList(L1);
return 0;
}