zoukankan      html  css  js  c++  java
  • 线性表

    #define LOCAL
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    #define OK   1
    #define ERROR  0
    #define TRUE 1
    #define FALSE 0
    #define ElemType int
    #define    MAXSIZE  100   /*此处的宏定义常量表示线性表可能达到的最大长度*/
    typedef  struct
    { 
        ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/
        int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
    }SeqList;
    
    int  Locate(SeqList L, ElemType e)
    {    
        int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
        while ((i<=L.last)&&(L.elem[i]!=e))/*顺序扫描表,直到找到值为e的元素, 或扫描到表尾而没找到*/
            i++; 
        if  (i<=L.last)
            return(i+1);  /*若找到值为e的元素,则返回其序号*/
        else
            return(-1);  /*若没找到,则返回空序号*/
    }
    
    /*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,
    i的合法取值范围是 1≤i≤L->last+2  */
    int  InsList(SeqList *L,int i,ElemType e)
    { 
        int k;
        if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/
        {
            printf("插入位置i值不合法");
            return(ERROR);
        }
        if(L->last>= MAXSIZE-1)
        {
            printf("表已满无法插入");
            return(ERROR);
        }
        for(k=L->last;k>=i-1;k--)   /*为插入元素而移动位置*/
            L->elem[k+1]=L->elem[k];
        L->elem[i-1]=e;   /*在C语言数组中,第i个元素的下标为i-1*/
        L->last++;
        return(OK);
    }
    
    int  DelList(SeqList *L,int i,ElemType *e)
    /*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */    
    { 
        int k;
        if((i<1)||(i>L->last+1))   
        { 
            printf("删除位置不合法!");
            return(ERROR);
        }
        *e = L->elem[i-1];  /* 将删除的元素存放到e所指向的变量中*/
        for(k=i; i<=L->last; k++)
            L->elem[k-1] = L->elem[k];  /*将后面的元素依次前移*/
        L->last--;
        return(OK);
    }
    
    void    merge(SeqList *LA,  SeqList *LB,  SeqList *LC)
    {
        int i,j,k;
        i=0;j=0;k=0;
        while(i<=LA->last&&j<=LB->last)
            if(LA->elem[i]<=LB->elem[j])
            {
                LC->elem[k]= LA->elem[i];
                i++; 
                k++;
            }
            else
            {
                LC->elem[k]=LB->elem[j];
                j++; 
                k++;
                                }
        while(i<=LA->last)    /*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/
        {
            LC->elem[k]= LA->elem[i];
            i++; 
            k++;
        }
        while(j<=LB->last)  /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/    
        {
            LC->elem[k]= LB->elem[j];
            j++; 
            k++;
        }
        LC->last=LA->last+LB->last+1;
    }
    void Display(SeqList *Sq)
    {
        for(int i=0; i<=Sq->last; i++)
        {
            printf("%d ",Sq->elem[i]);
        }
    }
    int main()
    {
    #ifdef LOCAL
        freopen("2.in","r",stdin);
        freopen("2.out","w",stdout);
    #endif
        SeqList LA,LB,LC;
        int i,r;
        printf("请输入线性表LA的长度:
    ");
        scanf("%d",&r);
        LA.last = r-1;
        printf("请输入线性表的各元素值:
    ");
        for(i=0; i<=LA.last; i++)
        {
            scanf("%d",&LA.elem[i]);
        }
        printf("请输入线性表LB的长度:
    ");
        scanf("%d",&r);
        LB.last = r-1;
        printf("请输入线性表的各元素值:
    ");
        for(i=0; i<=LB.last; i++)
        {
            scanf("%d",&LB.elem[i]);
        }
        merge(&LA,&LB,&LC);
        Display(&LC);
        /*
        SeqList l;
        int p,q,r;
        int i;
        printf("请输入线性表的长度:
    ");
        scanf("%d",&r);
        l.last = r-1;
        printf("请输入线性表的各元素值:
    ");
        for(i=0; i<=l.last; i++)
        {
            scanf("%d",&l.elem[i]);
        }
        printf("请输入要查找的元素值:
    ");
        scanf("%d",&q);
        p=Locate(l,q);
        if(p == -1)
            printf("在此线性表中没有该元素!
    ");
        else
            printf("该元素在线性表中的位置为:%d
    ",p);
        
        ElemType key;
        int local;
        printf("请输入要插入元素值key,和要插入的位置local.
    ");
        scanf("%d%d",&key,&local);
        printf("插入元素值:"); 
        if(InsList(&l,key,local)==OK)
        {
            printf("OK
    ");
        }else
        {
            printf("ERROR
    ");
        }
        
        scanf("请输入要删除元素的位置:
    ",&local);    
        printf("删除元素值:"); 
        if(DelList(&l,local,&key)==OK)
        {
            printf("OK,key=%d
    ",key);
        }else
        {
            printf("ERROR
    ");
        }
        */    
        return 0;
    }
  • 相关阅读:
    Git使用及关联远程仓库
    Ceres Solver
    Halcon手眼标定
    Halcon 3D定位方法
    机器学习-数学基础
    Halcon匹配方法
    手眼标定
    C动态内存分配
    Halcon Calibration Assistant
    Visualization
  • 原文地址:https://www.cnblogs.com/jianfengyun/p/4002228.html
Copyright © 2011-2022 走看看