线性表--算法设计题2.29
生活随笔
收集整理的這篇文章主要介紹了
线性表--算法设计题2.29
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
已知A,B和C為三個遞增有序的線性表,現要求對A表作如下操作:刪去那些既在B表中出現又在C表中出現的元素。試對順序表編寫實現上述操作的算法.(注意:題中沒有特別指明同一表中的元素值各不相同)。
#include<stdlib.h>
#define?LIST_INIT_SIZE?10
#define?LIST_INCREMENT?2
#define?ERROR?0
#define?OK?1
#define?OVERFLOW?-1
#define?TRUE?1
typedef?int?Status;
struct?SqList
{
?????int?*elem;
?????int?length;
?????int?listsize;
};
void?InitList(SqList?&L)
{
?????L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
?????if(!L.elem)
???????exit(OVERFLOW);
?????L.length=0;
?????L.listsize=LIST_INIT_SIZE;
}
Status?ListInsert(SqList?&L,int?i,int?e)
{
?????int?*newbase,*q,*p;
?????if(i<1||i>L.length+1)
???????return?ERROR;
?????if(L.length==L.listsize)
?????{
??????????newbase=(int*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(int));
??????????if(!newbase)
????????????exit(OVERFLOW);
??????????L.elem=newbase;
??????????L.listsize+=LIST_INCREMENT;
?????????
????????}
????????q=L.elem+i-1;
????????for(p=L.elem+L.length-1;?p>=q;?--p)
??????????*(p+1)=*p;
????????*q=e;
????????++L.length;
????????return?OK;
}
void?CreateList(SqList?&L,int?len)
{
?????int?i,t;
?????printf("Please?input?elems:?");
?????for(i=1;?i<=len;?i++)
?????{?
???????scanf("%d",&t);
??????????ListInsert(L,i,t);?
????????}
}
void?ListTraverse(SqList?L,void(*vist)(int&))
{
?????int?*p=L.elem;
?????int?i;
?????for(i=1;?i<=L.length;?i++)
?????{
??????????vist(*p++);
????????}
????????printf("\n");
}
void?print1(int?&c)
{
?????printf("%d?",c);
}
int?cmp(const?void?*a,const?void?*b)
{
?????return?*(int*)a?-?*(int*)b;
}
void?ListSort(SqList?&L)
{
??qsort(L.elem,L.length,sizeof(int),cmp);????
????
}
void?ListCross(SqList?La,SqList?Lb,SqList?&Lc)
{
?????int?i=0,j=0,k=1;
?????while(i<La.length?&&?j<Lb.length)
?????{
??????????if(La.elem[i]<Lb.elem[j])
??????i++;
????else
????{
?????????if(La.elem[i]>Lb.elem[j])
???????????j++;
?????????else
?????????{
??????????????ListInsert(Lc,k,La.elem[i]);
??????????????i++;
??????????????k++;
????????????}
???????}?????????
????????}
}
void?ListMinus(SqList?La,SqList?Lb,SqList?&Lc)
{
?????int?i=0,j=0,k=1;
?????while(i<La.length?&&?j<Lb.length)
?????{
??????????if(La.elem[i]<Lb.elem[j])
??????????{
????????????ListInsert(Lc,k,La.elem[i]);
????????????i++;
????????????k++;
??????????}
??????????else
??????????{
???????????????if(La.elem[i]>Lb.elem[j])
???????????????{
????????????????????j++;
??????????????????}
??????????????????else
??????????????????{
???????????????????????i++;
???????????????????????j++;
?????????????????????}
?????????????}??
????????}
????
}
int?main()
{
?????SqList?La,Lb,temp,Lc,Ld;
?????InitList(La);
?????InitList(Lb);
?????InitList(Lc);
?????InitList(Ld);
?????InitList(temp);
?????
?????int?La_len,Lb_len,Lc_len;
?????printf("input?length?of?La:?");
?????scanf("%d",&La_len);
?????printf("input?length?of?Lb:?");
?????scanf("%d",&Lb_len);
?????printf("input?length?of?Lc:?");
?????scanf("%d",&Lc_len);
?????
?????CreateList(La,La_len);
?????CreateList(Lb,Lb_len);?
?????CreateList(Lc,Lc_len);?
?????
?????printf("List?a:?");
?????ListTraverse(La,print1);
?????printf("List?b:?");
?????ListTraverse(Lb,print1);
?????printf("List?c:?");
?????ListTraverse(Lc,print1);
?????
?????printf("After?sorting?List?a:?");
?????ListSort(La);
?????ListTraverse(La,print1);
?????printf("After?sorting?List?b:?");
?????ListSort(Lb);
?????ListTraverse(Lb,print1);
?????printf("After?sorting?List?c:?");
?????ListSort(Lc);
?????ListTraverse(Lc,print1);
?????
?????ListCross(Lb,Lc,temp);
?????ListSort(temp);
?????printf("temp?List:?");
?????ListTraverse(temp,print1);
?????
??ListMinus(La,temp,Ld);
??ListSort(Ld);
?????printf("List?d:?");
?????ListTraverse(Ld,print1);
?????return?0;
?C code:
#include<stdio.h>#include<stdlib.h>
#define?LIST_INIT_SIZE?10
#define?LIST_INCREMENT?2
#define?ERROR?0
#define?OK?1
#define?OVERFLOW?-1
#define?TRUE?1
typedef?int?Status;
struct?SqList
{
?????int?*elem;
?????int?length;
?????int?listsize;
};
void?InitList(SqList?&L)
{
?????L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
?????if(!L.elem)
???????exit(OVERFLOW);
?????L.length=0;
?????L.listsize=LIST_INIT_SIZE;
}
Status?ListInsert(SqList?&L,int?i,int?e)
{
?????int?*newbase,*q,*p;
?????if(i<1||i>L.length+1)
???????return?ERROR;
?????if(L.length==L.listsize)
?????{
??????????newbase=(int*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(int));
??????????if(!newbase)
????????????exit(OVERFLOW);
??????????L.elem=newbase;
??????????L.listsize+=LIST_INCREMENT;
?????????
????????}
????????q=L.elem+i-1;
????????for(p=L.elem+L.length-1;?p>=q;?--p)
??????????*(p+1)=*p;
????????*q=e;
????????++L.length;
????????return?OK;
}
void?CreateList(SqList?&L,int?len)
{
?????int?i,t;
?????printf("Please?input?elems:?");
?????for(i=1;?i<=len;?i++)
?????{?
???????scanf("%d",&t);
??????????ListInsert(L,i,t);?
????????}
}
void?ListTraverse(SqList?L,void(*vist)(int&))
{
?????int?*p=L.elem;
?????int?i;
?????for(i=1;?i<=L.length;?i++)
?????{
??????????vist(*p++);
????????}
????????printf("\n");
}
void?print1(int?&c)
{
?????printf("%d?",c);
}
int?cmp(const?void?*a,const?void?*b)
{
?????return?*(int*)a?-?*(int*)b;
}
void?ListSort(SqList?&L)
{
??qsort(L.elem,L.length,sizeof(int),cmp);????
????
}
void?ListCross(SqList?La,SqList?Lb,SqList?&Lc)
{
?????int?i=0,j=0,k=1;
?????while(i<La.length?&&?j<Lb.length)
?????{
??????????if(La.elem[i]<Lb.elem[j])
??????i++;
????else
????{
?????????if(La.elem[i]>Lb.elem[j])
???????????j++;
?????????else
?????????{
??????????????ListInsert(Lc,k,La.elem[i]);
??????????????i++;
??????????????k++;
????????????}
???????}?????????
????????}
}
void?ListMinus(SqList?La,SqList?Lb,SqList?&Lc)
{
?????int?i=0,j=0,k=1;
?????while(i<La.length?&&?j<Lb.length)
?????{
??????????if(La.elem[i]<Lb.elem[j])
??????????{
????????????ListInsert(Lc,k,La.elem[i]);
????????????i++;
????????????k++;
??????????}
??????????else
??????????{
???????????????if(La.elem[i]>Lb.elem[j])
???????????????{
????????????????????j++;
??????????????????}
??????????????????else
??????????????????{
???????????????????????i++;
???????????????????????j++;
?????????????????????}
?????????????}??
????????}
????
}
int?main()
{
?????SqList?La,Lb,temp,Lc,Ld;
?????InitList(La);
?????InitList(Lb);
?????InitList(Lc);
?????InitList(Ld);
?????InitList(temp);
?????
?????int?La_len,Lb_len,Lc_len;
?????printf("input?length?of?La:?");
?????scanf("%d",&La_len);
?????printf("input?length?of?Lb:?");
?????scanf("%d",&Lb_len);
?????printf("input?length?of?Lc:?");
?????scanf("%d",&Lc_len);
?????
?????CreateList(La,La_len);
?????CreateList(Lb,Lb_len);?
?????CreateList(Lc,Lc_len);?
?????
?????printf("List?a:?");
?????ListTraverse(La,print1);
?????printf("List?b:?");
?????ListTraverse(Lb,print1);
?????printf("List?c:?");
?????ListTraverse(Lc,print1);
?????
?????printf("After?sorting?List?a:?");
?????ListSort(La);
?????ListTraverse(La,print1);
?????printf("After?sorting?List?b:?");
?????ListSort(Lb);
?????ListTraverse(Lb,print1);
?????printf("After?sorting?List?c:?");
?????ListSort(Lc);
?????ListTraverse(Lc,print1);
?????
?????ListCross(Lb,Lc,temp);
?????ListSort(temp);
?????printf("temp?List:?");
?????ListTraverse(temp,print1);
?????
??ListMinus(La,temp,Ld);
??ListSort(Ld);
?????printf("List?d:?");
?????ListTraverse(Ld,print1);
?????return?0;
}?
轉載于:https://www.cnblogs.com/iwuyudong/archive/2011/05/03/2234051.html
總結
以上是生活随笔為你收集整理的线性表--算法设计题2.29的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CryEngine3 引擎非商业用途将免
- 下一篇: css 控制图片最大宽度