1.已知A,B和C为三个元素值递增有序顺序表,要求对A作如下运算,删除既在B中出现又在C中出现的元素。
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
int len;
int size;
int *data;
}sqlist;
int insert(sqlist * sq,int i,int x){
int j;
if(i<1||i>sq->len+1){
return -1;
}
for(j=sq->len;j>=i;j--){
sq->data[j]=sq->data[j-1];
}
sq->data[i-1]=x;
sq->len++;
return 0;
}
void init(sqlist * sq){
sq->data=(int *)malloc(sizeof(int)*MAXSIZE);
sq->len=0;
sq->size=MAXSIZE;
}
void list(sqlist sq){
int i;
for(i=0;i<sq.len;i++){
printf("%d ",sq.data[i]);
}
printf("\n");
}
void andset(sqlist * a,sqlist * b,sqlist * c){
int i=0,j=0,k=0;
while(j<b->len&&k<c->len){
if(b->data[j]>c->data[k]){
k++;
}else if(b->data[j]<c->data[k]){
j++;
}else{
while(a->data[i]<b->data[j]&&i<a->len){
i++;
}
if(a->data[i]==b->data[j]){
int j;
for(j=i;j<a->len-1;j++){
a->data[j]=a->data[j+1];
}
a->len--;
}
k++;
j++;
}
}
}
void main(){
sqlist a,b,c;
init(&a),init(&b),init(&c);
insert(&a,1,1),insert(&a,2,2),insert(&a,3,5),insert(&a,4,10),insert(&a,5,11);
insert(&b,1,2),insert(&b,2,4),insert(&b,3,7),insert(&b,4,10);
insert(&c,1,2),insert(&c,2,5),insert(&c,3,10),insert(&c,4,11);
list(a),list(b),list(c);
andset(&a,&b,&c);
list(a);
system("pause");
}
2.已知线性表按顺序存储,且每个元素都是均不相等的整数。设计把所有奇数移到所有偶数前边的算法。
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
int len;
int size;
int *data;
}sqlist;
int insert(sqlist * sq,int i,int x){
int j;
if(i<1||i>sq->len+1){
return -1;
}
for(j=sq->len;j>=i;j--){
sq->data[j]=sq->data[j-1];
}
sq->data[i-1]=x;
sq->len++;
return 0;
}
void init(sqlist * sq){
sq->data=(int *)malloc(sizeof(int)*MAXSIZE);
sq->len=0;
sq->size=MAXSIZE;
}
void list(sqlist sq){
int i;
for(i=0;i<sq.len;i++){
printf("%d ",sq.data[i]);
}
printf("\n");
}
void move(sqlist * sq){
int i=0,j=sq->len-1,t;
while(i<j){
while(sq->data[i]%2==1){
i++;
}
while(sq->data[j]%2==0){
j--;
}
if(i<j){
t=sq->data[i];
sq->data[i]=sq->data[j];
sq->data[j]=t;
}
}
}
void main(){
int i=1;
sqlist a;
init(&a);
for(i=1;i<9;i++){
insert(&a,i,i);
}
list(a);
move(&a);
list(a);
system("pause");
}