实验1 线性表的顺序实现

来源:互联网 发布:刮眉毛会变浓吗 知乎 编辑:程序博客网 时间:2024/04/28 13:00

  • 实验目录

  1. 基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L),实现顺序表的就地倒置。
  2. 编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。
  3. 已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。
  4. 假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc)的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整.
  5. 请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,所有偶数调整到表的右边,并分析算法的时间复杂度。

实验1

/**********************************//*文件名称:lab1-01.c             *//**********************************//*基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L),实现顺序表的就地倒置。*/#include "sequlist1.h"/*请将本函数补充完整,并进行测试*/void reverse(sequence_list *L){    int i = 0, j = L -> size - 1;    while(i < j)            //  就地倒置,左右交换;    {        int temp = L -> a[i];        L -> a[i] = L -> a[j];        L -> a[j] = temp;        i++, j--;           //  向中间移动;    }}int main(){    sequence_list L;/*定义顺序表*/    input(&L);        /*输入测试用例*/    print(&L);                  /*输出原表*/    reverse(&L);            /*顺序表倒置*/    print(&L);                  /*输出新表*/}

实验2

/**********************************//*文件名称:lab1_02.c             *//**********************************//*编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。*/#include "sequlist1.h"/*请将本函数补充完整,并进行测试*/void sprit(sequence_list *L1,sequence_list *L2,sequence_list *L3){  int i;  initseqlist(L2);          //  对L2,L3进行初始化;  initseqlist(L3);  for(i=0;i<L1->size;i++)  {  if(L1->a[i]%2==0)       //  如果是偶数,存入L3;  {  L3->a[L3->size++]=L1->a[i];    }else{                  //  如果是奇数,存入L2;  L2->a[L2->size++]=L1->a[i];  }  }}int main(){   sequence_list L1,L2,L3;/*定义三个顺序表*/    input(&L1);    /*输入L1*/    sprit(&L1,&L2,&L3);    /*对L1进行分类*/    print(&L1);    /*输出L1、L2和L3*/    print(&L2);    print(&L3);}<strong></strong>

实验3

/*已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。*/#include "sequlist1.h"/*请将本函数补充完整,并进行测试*/void merge(sequence_list *L1,sequence_list *L2,sequence_list *L3){    int i=0,j=0;    initseqlist(L3);        //  初始化L3;    while(i<L1->size && j<L2->size)     //  当两个表L1,L2都还有数据,便对第一个数据进行比较;    {       if(L1->a[i]<L2->a[j])            //  L1的第一个数据较小,便将第一个数据放入L3中;            L3->a[L3->size++]=L1->a[i++];       else            L3->a[L3->size++]=L2->a[j++];    }    while(i<L1->size) L3->a[L3->size++]=L1->a[i++];     //  最后两次操作,是确保两个表中数据最后都能够存入L3中;    while(j<L2->size) L3->a[L3->size++]=L2->a[j++];}int main(){    sequence_list L1,L2,L3;    input(&L1);/*输入时请输入有序数据*/    input(&L2);/*输入时请输入有序数据*/    merge(&L1,&L2,&L3);/*合并数据到L3*/    print(&L3);/*输出L3*/}<strong></strong>

实验4

/*假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc)的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整.  *//**********************************//*文件名称:lab1_04.c                 *//**********************************/#include "sequlist1.h"/*请将本函数补充完整,并进行测试*/void  inter(sequence_list *la,sequence_list *lb,sequence_list *lc){  int i,j;  initseqlist(lc);  for(i=0;i<la->size;i++)       //  遍历la,lb,用la中的每个数据比较,如果找到了相等的就存入lc;  {  for(j=0;j<lb->size;j++)  {  if(la->a[i]==lb->a[j])        {            lc->a[lc->size++]=la->a[i];            break;              //  找到了存入lc中之后就break,i++,如果不break,会假设lb中有多个数据,就会出现存入多次的现象;        }    }  }}int main(){  sequence_list la,lb,lc;  inputfromfile(&la,"1.txt"); /*从文件1.txt建立顺序表*/  inputfromfile(&lb,"2.txt");/*从文件2.txt建立顺序表*/  print(&la);      /*输出la*/  print(&lb);          /*输出lb*/  inter(&la,&lb,&lc);       /*求la与lb的交集存于lc中*/  print(&lc);     /*输出lc*/  return 0;}<strong></strong>

实验5

/*请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,所有偶数调整到表的右边,并分析算法的时间复杂度。*//**********************************//*文件名称:lab1_05.c                 *//**********************************/#include "sequlist1.h"/*请将本函数补充完整,并进行测试*/void partion(sequence_list *L){    //  时间复杂度为O(n);    int i=0,j=L->size-1;    while(i<j){        while(L->a[i]%2&&i<j) i++;          //  从左边开始,如果L->a[i]是奇数;寻找下一个;        while(L->a[j]%2==0&&i<j) j--;       //  从右边开始,如果L->a[j]是偶数,寻找下一个;        if(L->a[i]%2==0&&L->a[j]%2){        //  找到左边的偶数,右边的奇数,那么就进行交换;            int temp=L->a[j];            L->a[j]=L->a[i];            L->a[i]=temp;        }    }}int main(){  sequence_list L;  inputfromfile(&L,"3.txt");  print(&L);  /*输出表L*/  partion(&L);  print(&L);  /*输出新表*/  return 0;}

时间仓促,先发第一章的实验。




2 0
原创粉丝点击