第一题(c语言)
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
bool Del_Min(SqList *L,Elemtype *e)
{
if(L->len==0)return false;
*e=L->data[0];
int pos=0;
for(int i=0; ilen; i++)
{
if(L->data[i]<*e)
{
*e=L->data[i];
pos=i;
}
}
L->data[pos]=L->data[L->len-1];
L->len--;
return true;
}
int main()
{
SqList L;
L.len=0;
for(int i=0; i<=10; i++)
{
L.data[i]=i;
L.len++;
}
L.data[5]=-99;//最小元素
int k;
Del_Min(&L,&k);
printf("%d",k);//-99
return 0;
}
第二题
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
bool Reverse(SqList *L)
{
if(L->len==0)return false;
Elemtype t;
for(int i=0;ilen/2;i++)
{
//交换变量
t=L->data[i];
L->data[i]=L->data[L->len-i-1];
L->data[L->len-i-1]=t;
}
return true;
}
int main()
{
SqList L;
L.len=0;
for(int i=0; i<=10; i++)
{
L.data[i]=i;
L.len++;
}
Reverse(&L);
for(int i=0; i<=10; i++)
{
printf("%d ",L.data[i]);//10 9 8 7 6 5 4 3 2 1
}
return 0;
}
第三题
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
void del_x_1(SqList *L,Elemtype e)
{
int k=0;
//将不等e的元素挑选出来
for(int i=0;ilen;i++)
{
if(L->data[i]!=e)
{
L->data[k]=L->data[i];
k++;
}
}
L->len=k;
}
void del_x_2(SqList *L,Elemtype e)
{
int k=0;
//移动思维
for(int i=0;ilen;i++)
{
if(L->data[i]==e)k++;
else{
L->data[i-k]=L->data[i];//向前移动
}
}
L->len-=k;
}
int main()
{
SqList L;
L.len=0;
for(int i=0; i<=10; i++)
{
L.data[i]=i;
L.len++;
}
L.data[2]=-99;
L.data[3]=-99;
//del_x_1(&L,-99);
del_x_2(&L,-99);
for(int i=0; i
printf("%d ",L.data[i]);
}
return 0;
}
第四题(双指针)
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
bool Del_s_t(SqList *L,int s,int t)
{
if(L->len==0)return false;
if(s>=t) return false;
int i,j;
//找到大于等于s的第一个值
for(i=0; ilen&&L->data[i]=L->len)return false;
//找到大于t的第一个值
for(j=i; jlen&&L->data[j]<=t; j++);
//双指针法(将j后面的元素全部移动到i后面)
for(; jlen; i++,j++)
{
L->data[i]=L->data[j];
}
L->len=i;
return true;
}
int main()
{
SqList L;
L.len=0;
for(int i=0; i<10; i++)
{
L.data[i]=i+1;
L.len++;
}
Del_s_t_2(&L,2,4);
for(int i=0; i
printf("%d ",L.data[i]);// 1 5 6 7 8 9
}
return 0;
}
第五题
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
bool Del_s_t1(SqList *L,Elemtype s,Elemtype t)
{
if(L->len==0||s>=t)return false;
int k=0;
for(int i=0; ilen; i++)
{
if(L->data[i]data[i]>t)
{
L->data[k]=L->data[i];
k++;
}
}
L->len=k;
return true;
}
bool Del_s_t2(SqList *L,Elemtype s,Elemtype t)
{
if(L->len==0||s>=t)return false;
int k=0;
for(int i=0; ilen; i++)
{
if(L->data[i]>=s&&L->data[i]<=t)
{
k++;
}
else
{
L->data[i-k]=L->data[i];
}
}
L->len-=k;
return true;
}
int main()
{
SqList L;
L.len=0;
for(int i=0; i<10; i++) //10 2 3 4 5 2 1 2 1 3
{
scanf("%d",&L.data[i]);
L.len++;
}
//Del_s_t1(&L,2,4);
Del_s_t2(&L,2,4);
for(int i=0; i
printf("%d ",L.data[i]);
}
return 0;
}
第六题
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
//双指针逐渐像前移动
bool Delete_Same(SqList *L)
{
if(L->len==0)return false;
int i,j;
for(i=0,j=1;jlen;j++)
{
if(L->data[i]!=L->data[j])
{
L->data[++i]=L->data[j];
}
}
L->len=i+1;//下标从0开始所以+1
return true;
}
int main()
{
SqList L;
L.len=0;
for(int i=0; i<10; i++) //1 2 2 3 3 4 4 5 5 6
{
scanf("%d",&L.data[i]);
L.len++;
}
Delete_Same(&L);
for(int i=0; i
printf("%d ",L.data[i]);
}
return 0;
}
第七题(Merge)
#include
#include
#include
#define maxn 100
typedef int Elemtype;
typedef struct
{
Elemtype data[maxn];
int len;
} SqList;
bool Merge(SqList *A,SqList *B,SqList *C)
{
if(A->len+B->len>maxn)return false; //C的最大长度为100
int i=0,j=0,k=0;
while(ilen&&jlen)
{
if(A->data[i]data[j]){
C->data[k++]=A->data[i++];
}else{
C->data[k++]=B->data[j++];
}
}
while(ilen){
C->data[k++]=A->data[i++];
}
while(jlen){
C->data[k++]=B->data[j++];
}
C->len=k;
return true;
}
int main()
{
SqList A,B,C;
A.len=0,B.len=0,C.len=0;
for(int i=0; i<10; i++) //1 2 3 4 5 6 7 8 9 10
{
scanf("%d",&A.data[i]);
A.len++;
}
for(int i=0; i<10; i++) //1 2 3 4 5 6 7 8 9 10
{
scanf("%d",&B.data[i]);
B.len++;
}
Merge(&A,&B,&C);
for(int i=0; i
printf("%d ",C.data[i]);
}
return 0;
}