首页 > 编程知识 正文

数据结构实验报告总结(数据结构实验报告一)

时间:2023-05-05 16:07:07 阅读:121555 作者:602

用升序顺序表表示集合,求解两个集合的交集

(1)定义顺序表的存储结构

)2)编制存储增量有序集合的顺序表,实现求交集运算; //用升序顺序表表示集合,求解两个集合的交集//(1)定义顺序表的记忆结构; //)2)实现存储增量有序集合的顺序表的制作、求交集的运算; # include stdio.h # include stdlib.h # define maxsize 100//定义顺序表的存储结构的typedef struct{int data[MaxSize]; int length; }SqList; //创建顺序表,并将数组的值放入表中,即voidcreatelist(SQList*L,int a[],int n ) {int i=0,k=0; L=(sqlist* ) malloc ) sizeof (sqlist ); while(in ) {L-data[k]=a[i]; k,I; (}L-length=k; //输出线性表voiddisplist(sqlist*L ) for ) intI=0; iL-length; I ) (printf )、L-data[i]; () ) ) )、并行化函数)、双路合并算法--- (()/voidmergelist )、SqList *Lb、SqList *Lc ) {int i=0,j=0,k LC=(sqlist* ) malloc ) sizeof (sqlist ); while(ILA-lengthjlb-length ) if ) la-data[I]LB-data[j] ) {Lc-data[k]=La-data[i]; I、k; }elseif(la-data[I]LB-data[j] ) {Lc-data[k]=Lb-data[j]; j,k; }elseif(la-data[I]=LB-data[j] ) {Lc-data[k]=La-data[i]; I、j、k; }while(ILA-Length ) {Lc-data[k]=La-data[i]; I、k; }while(JLB-Length ) {Lc-data[k]=Lb-data[j]; j,k; (}Lc-length=k; (/------------------- */void intersection ) sqlist*la、SqList *Lb、SqList *Ld ) {int i=0,} while(ILA-Lengthjlb-Length ) if ) la-data[I]==LB-data[j] ) { Ld-data[k]=La-data[i]; I、j、k; }else{if(la-data[I]LB-data[j] ) j; (else ) I; }}}Ld-length=k; (/------------------*/int main ) ) {SqList *A、*B、*C、*D; inta [3]={ 2,5,9 }; intb [4]={ 3,5,9,11 }; 创建列表(a,a,3 ); 创建列表(b、b、4 ); 合并列表(a、b、c ); printf (并集: ); 显示(c; intersection(a,b,d ); printf (交叉: ); 显示(d; } 实验结果:

用升序有序的链表表示集合,求解两个集合的交集

(1)定义链表的存储结构

)2)构建链表以容纳增加的有序集合,实现交叉运算# include stdio.h # include stdlib.h//,定义单链表的存储结构结构节点*下一步; }LinkNode; //末尾插入法的单链接列表voidcreatelistr(linknode*L,int a[],int n ) {LinkNode *s,*r; L=(linknode* ) malloc ) sizeof (linknode ); 创建//头节点r=l//r始终指向尾节点,最初指向头节点for (inti=0; in; I ) (/循环建立数据节点s=(linknode* ) malloc ) sizeof ) linknode ); s-data=a[i]; //创建数据节点s r-next=s; //在节点r中插入节点s后,r=s; }r-next=NULL; //输出线性表voiddesplist(linknode*L ) {LinkNode *p=L-next; //p表示起始节点while(p (指p (p!=NULL(/p不是null,而是输出p的data域printf ) ' %d ',p-data ); p=p-next; //p到下一个节点(printf () (n ) ); (/)并行化函数,双路合并算法)/voidmergelist(linknode*la,LinkNode *LB,LinkNode *LC ) {LinkNode *pa=LA-next,* PPP //LC的起始节点r=创建LC//r始终是LC的尾节点while(pa!=NULLpb!=NULL () if(pa-dataPb-data ) ) s=(linknode * ) malloc (sizeof ) linknode ); //复制指向的节点s-data=pa-data; r-next=s; //LC中插入s节点r=s; pa=pa-next; //pa移动到下一个节点(elseif ) pa-data p B- data (s=) linknode * (malloc ) sizeof (linknode ) ); s-data=pb-data; r-next=s; r=s; pb=pb-next; }else{s=(linknode* ) malloc ) sizeof (linknode ); s-data=pb-data; r-next=s; r=s; pb=pb-next; //pa、pb都转移到下一个节点pa=pa-next; }while(pa!=NULL () s=(linknode* ) malloc ) sizeof (linknode ); s-data=pa-data; r-next=s; r=s; pa=pa-next; (while ) Pb!=NULL () s=(linknode* ) malloc ) sizeof (linknode ); s-data=pb-data; r-next=s; r=s; pb=pb-next; }r-next=NULL; //交叉函数voidintersection(linknode*la、LinkNode *LB、LinkNode *LD ) {LinkNode *pa=LA-next,*pb=LB-next,* r lll //LD的第一个节点r=创建LD的wile(pa!=NULLpb!=NULL () if (pa-data p B- data ) ) {pb=pb-next; }elseif(pa-dataPb-data ) {pa=pa-next; }else{s=(linknode* ) malloc ) sizeof (linknode ); s-data=pa-data; r-next=s; r=s; pb=pb-next; }r-next=NULL; }//主函数int main () {LinkNode *A、*B、*C、*D; inta [3]={ 2,5,9 }; intb [4]={ 3,5,9,11 }; createlistr(a,a,3 ); createlistr(b,b,4 ); 合并列表(a、b、c ); printf (并集: ); 显示(c; intersection(a,b,d ); printf (交叉: ); 显示(d; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。