赞
踩
1.掌握顺序表的存储结构形式及其描述方法和基本运算的实现
2.掌握用顺序表表示集合等数据的方法,并能设计出合理的存储结构,编写出有关运算的算法。
已知顺序表与相关函数定义如下(源代码文件sequlist.h),基于该内容完成实验题1~实验5。
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef int datatype; typedef struct { datatype a[MAXSIZE]; int size; }sequence_list; void initseqlist(sequence_list *L){ L->size=0; } void input(sequence_list *L){ datatype x; initseqlist(L); printf("请输入一组数据,以0做为结束符:\n"); scanf("%d",&x); while(x){ L->a[L->size++]=x; scanf("%d",&x); } } void inputfromfile(sequence_list *L,char *f){ int i,x; FILE *fp=fopen(f,"r"); L->size=0; if(fp){ while(!feof(fp)){ fscanf(fp,"%d",&L->a[L->size++]); } fclose(fp); } } void print(sequence_list *L){ int i; for(i=0;i<L->size;i++){ printf("%5d",L->a[i]); if((i+1)%10==0) printf("\n"); } printf("\n"); }
编写算法函数reverse(sequence_list *L),实现顺序表的倒置。
#include <iostream> #include"sequlist.h" #include<cstdio> using namespace std; void reverse(sequence_list *L){ int size=L->size; int b[105]; for(int i=0;i<size;i++){ b[i]=L->a[i]; } for(int i=0;i<size;i++){ L->a[i]=b[size-i-1]; } } int main(int argc, char** argv) { sequence_list L; initseqlist(&L); input(&L); print(&L); reverse(&L); print(&L); return 0; }
编写一个算法函数void sprit(sequence_list *L1,sequence_list *L2,sequence_list *L3),将顺序表中L1的数据进行分类,奇数存放到顺序表L2中,偶数存放到顺序表L3中。
#include <iostream> #include"sequlist.h" #include<cstdio> using namespace std; void sprit(sequence_list *L1,sequence_list *L2,sequence_list *L3){ initseqlist(L2); initseqlist(L3); int size1=L1->size; for(int i=0;i<size1;i++){ if(L1->a[i]%2==0){ L3->a[L3->size]=L1->a[i]; L3->size++; } else{ L2->a[L2->size]=L1->a[i]; L2->size++; } } } int main(){ sequence_list L1,L2,L3; initseqlist(&L1); initseqlist(&L2); initseqlist(&L3); input(&L1); sprit(&L1,&L2,&L3); print(&L1); print(&L2); print(&L3); return 0; }
已知顺序表L1和L2中数据均由小到大排序,请用尽可能快的方法将L1和L2中的数据合并到L3中,使数据在L3中按升序排列。
#include <iostream> #include"sequlist.h" #include<cstdio> using namespace std; void merge(sequence_list *L1,sequence_list *L2,sequence_list *L3){ int i=0,j=0,k=0; while(i<L1->size&&j<L2->size){ if(L1->a[i]<L2->a[j]){ L3->a[k++]=L1->a[i++]; L3->size++; } else{ L3->a[k++]=L2->a[j++]; L3->size++; } } while(i<L1->size){ L3->a[k++]=L1->a[i++]; L3->size++; } while(j<L2->size){ L3->a[k++]=L2->a[j++]; L3->size++; } } int main(){ sequence_list L1,L2,L3; initseqlist(&L1); initseqlist(&L2); initseqlist(&L3); input(&L1); input(&L2); merge(&L1,&L2,&L3); print(&L3); return 0; }
假设顺序表la和lb分别存放两个整数集合,函数void inter(sequence_list *la,sequence_list *lb,sequence_list *lc)的功能是将顺序表la和lb的交集存放到lc中。
#include <iostream> #include"sequlist.h" #include<cstdio> using namespace std; void inter(sequence_list *la,sequence_list *lb,sequence_list *lc){ int i=0,j=0; for(;i<la->size;i++){ for(j=0;j<lb->size;j++){ if(la->a[i]==lb->a[j]){ lc->a[lc->size++]=la->a[i]; break; } } } } int main(){ sequence_list la,lb,lc; initseqlist(&la); initseqlist(&lb); initseqlist(&lc); inputfromfile(&la,"1.txt"); inputfromfile(&lb,"2.txt"); print(&la); print(&lb); inter(&la,&lb,&lc); print(&lc); return 0; }
请编写一个算法函数void partion(sequence_list *L),尽可能的将顺序表*L中的所有奇数调整到表的左边,所有偶数调整到表的右边,并分析算法时间复杂度。
#include <iostream> #include"sequlist.h" #include<cstdio> using namespace std; void partion(sequence_list *L){ int size=L->size; int i=0,j=size-1; int c[105]={0}; for(int i=0;i<size;i++){ c[i]=L->a[i]; } i=0; for(int k=0;k<size;k++){ if(c[k]%2==1){ L->a[i++]=c[k]; } else{ L->a[j--]=c[k]; } } } int main(){ sequence_list L; initseqlist(&L); inputfromfile(&L,"3.txt"); print(&L); partion(&L); print(&L); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。