zoukankan      html  css  js  c++  java
  • 线性表的顺序实现——数据结构课堂作业

    /**********************************/
    /*顺序表的头文件,文件名sequlist.h*/
    /**********************************/

    #include  <stdio.h>
    #include  <stdlib.h>
    /**********************************/
    /*顺序表的头文件,文件名sequlist.h*/
    /**********************************/
    #define MAXSIZE 100
    typedef int datatype;
    typedef struct
    {
        datatype a[MAXSIZE];
        int size;
    } sequence_list;
    
    /**********************************/
    /*函数名称:initseqlist()         */
    /*函数功能:初始化顺序表          */
    /**********************************/
    void initseqlist(sequence_list *L)
    {
        L->size=0;
    }
    /**********************************/
    /*函数名称:input()               */
    /*函数功能:输入顺序表            */
    /**********************************/
    void input(sequence_list *L)
    {
        datatype x;
        initseqlist(L);
        printf("请输入一组数据,以0做为结束符:
    ");
        scanf("%d",&x);
        while (x)
        {
            L->a[L->size++]=x;
            scanf("%d",&x);
        }
    }
    /**********************************/
    /*函数名称:inputfromfile()       */
    /*函数功能:从文件输入顺序表      */
    /**********************************/
    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);
        }
    }
    /**********************************/
    /*函数名称:print()               */
    /*函数功能:输出顺序表            */
    /**********************************/
    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("
    ");
        }
        printf("
    ");
    }
    View Code

    /**********************************/
    /*文件名称:lab1-01.c */
    /**********************************/
    /*基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L),实现顺序表的就地倒置。*/

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

    /**********************************/
    /*文件名称:lab1_02.c */
    /**********************************/

    /*编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),
    将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。
    */

    /**********************************/
    /*文件名称:lab1_02.c             */
    /**********************************/
    
    /*编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),
    将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。
    */
    
    #include "sequlist.h"
    /*请将本函数补充完整,并进行测试*/
    void sprit(sequence_list *L1,sequence_list *L2,sequence_list *L3)
    {
        initseqlist(L2);
        initseqlist(L3);
        int len = L1->size;
        int i;
        for(i=0;i<len;i++) {
            if((L1->a[i])%2) {
                L2->a[(L2->size)++] = L1 ->a[i];
            }
            else {
                L3->a[(L3->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);
    }
    View Code

    /*已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。*/

    /*已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。*/
    
    #include "sequlist.h"
    #include <stdlib.h>
    /*请将本函数补充完整,并进行测试*/
    
    void merge(sequence_list *L1,sequence_list *L2,sequence_list *L3)
    {
        initseqlist(L3);
        int i,j;
        int len1 = L1->size;
        int len2 = L2->size;
        int pos1 = 0;
        int pos2 = 0;
        int flag = 0;
        for(i=0;i<len1+len2;i++) {
            if(L1->a[pos1]<L2->a[pos2]) {
                L3->a[L3->size++] = L1->a[pos1++];
            }
            else if(L1->a[pos1]>L2->a[pos2]) {
                L3->a[L3->size++] = L2->a[pos2++];
            }
            else if(L1->a[pos1]==L2->a[pos2]) {
                L3->a[L3->size++] = L1->a[pos1];
                pos1 ++;
                pos2 ++;
            }
            if(pos1>=len1||pos2>=len2) {
                flag = 1;
                break;
            }
        }
    
        if(flag) {
            if(pos1>=len1)
            {
                for(pos2;pos2<len2;pos2++)
                    L3 ->a[L3->size++] = L2 ->a[pos2];
            }
            else if(pos2>=len2) {
                for(pos1;pos1<len1;pos1++) {
                    L3 ->a[L3->size++] = L1 ->a[pos1];
                }
            }
        }
    
    
    
    }
    int main()
    {
        sequence_list L1,L2,L3;
        input(&L1);                /*输入时请输入有序数据*/
        input(&L2);                /*输入时请输入有序数据*/
        merge(&L1,&L2,&L3);        /*合并数据到L3*/
        print(&L3);                /*输出L3*/
    }
    View Code

    /*假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc)
    的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整. */

    /**********************************/
    /*文件名称:lab1_04.c */
    /**********************************/

    /*假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc)
    的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整.  */
    
    /**********************************/
    /*文件名称:lab1_04.c                 */
    /**********************************/
    #include "sequlist.h"
    /*请将本函数补充完整,并进行测试*/
    void  inter(sequence_list *la,sequence_list *lb,sequence_list *lc)
    {
        int len1 = la->size;
        int len2 = lb->size;
        initseqlist(lc);
        int i,j;
        for(i=0;i<len1;i++) {
            for(j=0;j<len2;j++) {
                if(la->a[i]==lb->a[j]) {
                    lc->a[lc->size++] = la->a[i];
                    break;
                }
            }
        }
    }
    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;
    }
    View Code

    /*
    请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
    所有偶数调整到表的右边,并分析算法的时间复杂度。
    */
    /**********************************/
    /*文件名称:lab1_05.c */
    /**********************************/

    /*
    请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
    所有偶数调整到表的右边,并分析算法的时间复杂度。
    */
    /**********************************/
    /*文件名称:lab1_05.c                 */
    /**********************************/
    #include "sequlist.h"
    /*请将本函数补充完整,并进行测试*/
    void partion(sequence_list *L)
    {
        int len = L->size;
        sequence_list Ltemp1;
        sequence_list Ltemp2;
        initseqlist(&Ltemp1);
        initseqlist(&Ltemp2);
        int i;
        for(i=0;i<len;i++) {
            if(L->a[i]%2) {
                Ltemp1.a[Ltemp1.size++] = L->a[i];
            }
            else {
                Ltemp2.a[Ltemp2.size++] = L->a[i];
            }
    
        }
    
        initseqlist(L);
        int len1 = Ltemp1.size;
        int len2 = Ltemp2.size;
        //int k = 0;
        for(i=0;i<len1;i++) {
            L->a[L->size++] = Ltemp1.a[i];
        }
        for(i=0;i<len2;i++) {
            L->a[L->size++] = Ltemp2.a[i];
        }
    
    }
    int main()
    {
      sequence_list L;
      inputfromfile(&L,"3.txt");
      print(&L);                          /*输出表L*/
      partion(&L);
      print(&L);                          /*输出新表*/
      return 0;
    }
    View Code
  • 相关阅读:
    composer 中国全量镜像 laravel-china.org
    Increase PHP script execution time with Nginx
    How to make a USB stick use ISO image file in debian
    Getting svn to ignore files and directories
    Carbon document
    Use Laravel/homestead 环境维护基于 brophp 开发的老项目
    Vagrant WinNFSd
    How to use jQuery countdown plugin
    消息系统的设计与实现
    VMvare 复制的数据库,需要改变的配置
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6031533.html
Copyright © 2011-2022 走看看