diff --git a/ex2_1.c b/ex2_1.c new file mode 100644 index 0000000..e0e6956 --- /dev/null +++ b/ex2_1.c @@ -0,0 +1,230 @@ +#include +#include +#include +#define MAX 100 +typedef int DataType; +typedef struct { + DataType data[MAX]; + int length; +}SqList; + +void initList(SqList *L){ + L->length = 0; + printf("\n初始化成功\n"); +} +int insertList(SqList *L, int i, DataType e){ + if(i<1 || i>(L->length+1)){ + return 0; + } + // 将 i 及其以后的元素向后移动 1 个单位 + for(int j=L->length;jdata[j] = L->data[j-1]; + } + // 插入 + L->data[i-1]=e; + L->length++; + return 1; +} +int DeleteList1(SqList *L, DataType e){ + for(int i=0;ilength;i++){ + if(L->data[i]==e){ + // 将 i 以后的元素向前移动 1 个单位 + for(int j=i;jlength;j++){ + L->data[j]=L->data[j+1]; + } + L->length--; + return 1; + } + } + return 0; +} +int DeleteList2(SqList *L, int i){ + if(i<1 || i>(L->length)){ + return 0; + } + // 将 i-1 以后的元素向前移动 1 个单位 + for(int j=i-1;jlength;j++){ + L->data[j]=L->data[j+1]; + } + L->length--; + return 1; +} +int FindList(SqList *L, DataType e){ + int i=0; + while(ilength && L->data[i]!=e){ + i++; + } + // 未找到 + if(i>=L->length){ + return -1; + } + return i+1; +} +void OutputList(SqList *L){ + printf("\n\n"); + for(int i=0;ilength;i++){ + printf("第 %d 个元素的值为:%d\n",i+1,L->data[i]); + } + printf("\n\n"); +} +int DeleteList3(SqList *L, DataType start, DataType end){ + // 确认 start <= end + int temp; + if(start>end){ + temp=end; + end=start; + start=temp; + } + int l_s=-1,l_e=-1; + for(int i=0;ilength;i++){ + // 查找区间小的位置 + if(L->data[i] >= start && l_s==-1){ + l_s=i; + } + // 查找区间大的位置 + if(L->data[i] <= end){ + l_e=i; + } + } + // 未找到 + if(l_s==-1 || l_e==-1){ + return 0; + } + // 将 l_e + 1 以后的元素向前移动 l_e - l_s + 1 个单位 + int move = l_e - l_s + 1; + for(int i=l_e + 1;ilength;i++){ + L->data[i-move] = L->data[i]; + } + L->length -= move; + return 1; +} +SqList Merge(SqList L1, SqList L2){ + SqList L3; + int x=0,y=0,n=0; + initList(&L3); + while(xL2.data[y]){ + L3.data[n]=L2.data[y]; + n++; + y++; + } else if (L1.data[x]==L2.data[y]){ + L3.data[n]=L1.data[x]; + n++; + x++; + y++; + } + } + // 插入剩余元素 + for(int i=x;i-1){ + printf("该元素在 %d\n",n); + } else { + printf("未找到该元素\n"); + } + break; + case 3: + printf("请输入需要删除的元素的值:"); + scanf("%d",&e); + n=DeleteList1(&L1,e); + if(n==0){ + printf("删除失败,元素不存在。\n"); + } else { + printf("删除成功\n"); + } + OutputList(&L1); + break; + case 4: + printf("请输入需要删除的元素的位置:"); + scanf("%d",&n); + n=DeleteList2(&L1,n); + if(n==0){ + printf("删除失败,位置不存在。\n"); + } else { + printf("删除成功\n"); + } + OutputList(&L1); + break; + case 5: + printf("请输入需要删除的元素值区间 x y:"); + scanf("%d %d",&x,&y); + n=DeleteList3(&L1,x,y); + if(n==0){ + printf("删除失败,位置不存在。\n"); + } else { + printf("删除成功\n"); + } + OutputList(&L1); + break; + case 6: + printf("请输入第二个线性表的长度:"); + scanf("%d",&n); + initList(&L2); + for(int i=0;i - -#define MAX 100 -typedef int DataType; -typedef struct { - DataType data[MAX]; - int length; -}SqList; -void initList(SqList *L){ - (*L).length=0; -} -int insertList(SqList *L, int i, DataType e){ - if(i<1||i>(*L).length+1){ - return 0; - } - // 将i及其以后的元素向后移动1个单位 - for(int j=(*L).length;j>i-1;j--){ - (*L).data[j]=(*L).data[j-1]; - } - (*L).data[i-1]=e; - (*L).length++; - return 1; -} -int DeleteList1(SqList *L, DataType e){ - for(int j=0;j<(*L).length;j++){ - if((*L).data[j]==e){ - // 将 j 以后的元素向前移动1个单位 - for(int i=j;i<(*L).length;i++){ - (*L).data[i]=(*L).data[i+1]; - } - (*L).length--; - return 1; - } - } - return 0; -} -int DeleteList2(SqList *L, int i){ - if(i<1||i>(*L).length){ - return 0; - } - // 将 i-1 以后的元素向前移动1个单位 - for(int j=i;j<(*L).length;j++){ - (*L).data[j-1]=(*L).data[j]; - } - (*L).length--; - return 1; -} -int FindList(SqList *L, DataType e){ - int i=0; - while(i<(*L).length&&(*L).data[i]!=e){ - i++; - } - if(i>=(*L).length){ - return -1; - } - return i+1; -} -void OutputList(SqList *L){ - printf("\n\n"); - for(int j=0;j<(*L).length;j++){ - printf("第%d个元素的值为:%d\n",j+1,(*L).data[j]); - } -} -int DeleteList3(SqList *L, DataType start, DataType end){ - int start_=-1,end_=-1; - for(int j=0;j<(*L).length;j++){ - if((*L).data[j]>=start&&start_==-1){ - start_=j; - } - if((*L).data[j]<=end){ - end_=j; - } - } - if(start_==-1||end_==-1){ - return 0; - } - // 将 end_ + 1 以后的元素向前移动 end_ - start_ + 1 个单位 - int move=end_-start_ + 1; - for(int i=end_ + 1;i<(*L).length;i++){ - (*L).data[i-move]=(*L).data[i]; - } - (*L).length-=move; - return 1; -} -SqList Merge(SqList L,SqList L_){ - SqList l; - int x=0,y=0,n=0; - initList(&l); - while(x-1){ - printf("该元素的位置为:%d\n",n); - } - else { - printf("未找到该元素\n"); - } - printf("请输入需要删除元素的值:"); - scanf("%d",&e); - n=DeleteList1(&l,e); - if(n==0){ - printf("删除失败\n\n"); - } - OutputList(&l); - - printf("请输入需要删除元素的位置:"); - scanf("%d",&n); - n=DeleteList2(&l,n); - if(n==0){ - printf("删除失败\n\n"); - } - - OutputList(&l); - - int x,y; - printf("请输入需要删除的元素值 x y:"); - scanf("%d %d",&x,&y); - n=DeleteList3(&l,x,y); - if(n==0){ - printf("删除失败\n\n"); - } - OutputList(&l); - - printf("请输入第二个线性表长度:"); - scanf("%d",&n); - initList(&l_); - for(int i=0;i