wherem 2020-04-15 13:16 采纳率: 0%
浏览 1517

创建有若干个元素(可以是整型数值)的顺序表,实现对顺序表的初始化,对已建立的顺序表插入操作、删除操作、遍历输出顺序表?

创建有若干个元素(可以是整型数值)的顺序表,实现对顺序表的初始化,对已建立的顺序表插入操作、删除操作、遍历输出顺序表。

要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作:

( 1 )创建顺序表 21 、 18 、 30 、 75 、 42 、 56 ,并输出顺序表中的各元素值。

( 2 )在顺序表的第 3 个位置插入 67 ,并输出此时顺序表中的各元素值。

( 3 )删除顺序表中的第 6 个数据元素,并输出此时顺序表中的各元素值。

( 4 )查找顺序表中是否有 75 这个元素,如果有返回该元素在顺序表中的位序。

  • 写回答

1条回答 默认 最新

  • alfedf 2020-04-21 08:58
    关注
    #include <malloc.h>  
    #include <stdio.h>  
    #include <stdlib.h>  
    
    #define TRUE  1  
    #define FALSE  0  
    #define OK 1  
    #define ERROR 0  
    #define OVERFLOW -2  
    typedef int Status;  
    
    
    #define INIT_SIZE 100   
      /*初始分配空间的大小*/  
    #define LISTINCREMENT 10     
    /*分配增量*/  
    
    typedef int ElemType;  
    
    typedef struct{  
    
       ElemType  *elem;                     //存储空间基址  
       int       length;                     //当前长度  
       int       listsize;                          //当前分配的存储容量  
    
    
    }SqList;  
    /*存储空间的起始地址。*/  
    /*线性表中数据元素个数,即表长*/  
    /*线性表所申请的存储空间的大小*/  
    
    SqList CreateList_Sq(SqList L)  
    /*创建一个空的线性表*/  
    {  
       L.elem=(ElemType *)malloc(INIT_SIZE*sizeof(int));  
       if(!L.elem)  exit(ERROR);           //存储分配失败  
       L.length=0;                                     //空表长度为0  
       L.listsize=INIT_SIZE;         //初始存储容量  
       return   L;  
    }  
    
    
    void InsertList_Sq(SqList *L, int i, ElemType e)  
    /*在线性表的第i个位置前插入元素e*/  
    {  int * newbase,*q,*p;  
        if ((i<1)||(i>L->length+1))   
        {printf("i值不合法!\n");exit(ERROR);}  
        if (L->length>=L->listsize)  /*当前空间已满,增加分配空间*/  
        {  
            newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));  
            if (!newbase) exit(ERROR);  
            L->elem=newbase;  
            L->listsize= L->listsize+LISTINCREMENT;  
        }  
    
       q=&(L->elem[i-1]);                      //q为插入位置  
       for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p;  
       *q=e;                                         
       ++L->length;                              //表长增1  
    }  
    
    void DeleteList_Sq(SqList *L, int i)  
    /* 删除线性表中的第i个元素*/  
    {         
        int *q,*p;  
        if ((i<1)||(i>L->length))   
        {printf("i值不合法!\n");exit(ERROR);}  
         p=&(L->elem[i-1]);                                 //p为被删除元素的位置  
         q=L->elem+L->length-1;                          //表尾元素的位置  
         for(++p; p<=q; ++p)  *(p-1)=*p;          //被删除之后的元素前移  
         --L->length;                                            //表长减1  
    
    }  
    
    
    void Print_Sq(SqList L)  
    /*遍历顺序线性表并输出*/  
    {   int i;  
        for(i=0;i<L.length;i++)  
        {  
           printf("%3d ",L.elem[i]);  
        }  
    }  
    
    
    int equal(ElemType e1,ElemType e2)  
    /*判两个元素是否相等*/  
    {  
        if (e1==e2) return 1;  
        else return 0;  
    }  
    
    int LocateElem_Sq(SqList L,ElemType e, int (* compare)(ElemType e1,ElemType e2))  
    {   int i;   
        i=1;  
        ElemType *p;  
        p=L.elem;  
        while(i<L.length && !(*compare)(*p++,e))  ++i;  
        if(i<=L.length) return i;  
        else return 0;  
    
    
    }  
    
    void Getelem(SqList L,const int i,ElemType *e)  
    {  
        if(i<1||i>L.length)  exit(ERROR);       //i值不合法  
        *e= L.elem[i-1];  
        exit(OK);  
    
    
    }  
    
    
    int main()  
    /*主函数*/  
    {  int i;  
       SqList Lq;  
       Lq=CreateList_Sq(Lq);  
       InsertList_Sq(&Lq,1,21);  
       InsertList_Sq(&Lq,2,18);  
       InsertList_Sq(&Lq,3,30);  
       InsertList_Sq(&Lq,4,75);  
       InsertList_Sq(&Lq,5,42);  
       InsertList_Sq(&Lq,6,56);  
       printf("初始顺序表为\n");  
       Print_Sq(Lq) ;  
       InsertList_Sq(&Lq,3,67);  
       printf("\n插入67后顺序表为\n");  
       Print_Sq(Lq) ;  
       DeleteList_Sq(&Lq, 6);  
       printf("\n删除第6个元素后顺序表为\n");  
       Print_Sq(Lq);  
       if ((i=LocateElem_Sq(Lq,75,equal)))  
    
           printf("\n存在元素75且位置为%d\n",i);  
       else  
    
            printf("\n不存在元素75\n");  
    free(Lq.elem);  
    return 1;  
    }  
    
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大