美文网首页
顺序表的基本操作(C语言)

顺序表的基本操作(C语言)

作者: 我叫柱子哥 | 来源:发表于2018-05-06 17:15 被阅读33次
    #include <stdio.h>
    #include <malloc/malloc.h>
    
    ///<1.定义结构体
    #define  ListSize 100
    typedef  int DataType;
    typedef  struct {
        DataType data[ListSize];
        int length;
    }SeqList;
    
    ///< 初始化顺序表
    SeqList initSeqList(){
        SeqList seqList;
        seqList.length = 0;
        int length,i;
        printf("请输入表长:\n");
        scanf("%d",&length);
        printf("表长:%d\n",length);
        seqList.length = length;
        for (i = 0; i< length; i++) {
            printf("请输入第%d个元素:\n",i+1);
            scanf("%d",&seqList.data[i]);
        }
        return seqList;
    }
    ///< 打印顺序表
    void printSeqList(SeqList seqList){
        int i;
        printf("******************************************\n");
        for (i = 0; i< seqList.length; i++) {
            printf("%d\t",seqList.data[i]);
        }
        printf("\n******************************************\n");
    
    }
    ///< 求表长
    int printSeqListLength(SeqList seqList){
        return seqList.length;
    }
    ///< 取表中元素
    int getNodeInSeqList(SeqList seqList,int location){
        return seqList.data[location - 1];
    }
    /**
     按值查找
    
     @param seqList 要操作的线性表
     @param value 要查找的值
     @return 数组
     */
    int * getNodeInSeqListWithValue(SeqList seqList,int value){
        int i,tag = 0;///< tag检测数组个数
        int a[seqList.length];
        for (i = 0; i< seqList.length; i++) {
            if (value == seqList.data[i]) {
                a[tag] = i;
                tag ++;
            }
        }
        int * array = (int *)malloc(sizeof(int)*tag);
        tag = 0;
        for (i = 0; i< seqList.length; i++) {
            if (value == seqList.data[i]) {
                array[tag] = i;
                tag ++;
            }
        }
        return array;
    }
    ///< 顺序表的插入操作
    
    /**
     顺序表的插入操作
    
     @param seqList 要插入的顺序表
     @param location 插入位置
     @param value 插入的值
     @return seqList
     */
    SeqList insertSeqList(SeqList seqList,int location,int value){
        seqList.length ++;
        printf("新的表长是:%d\n",seqList.length);
        printSeqList(seqList);
        int j;
        for (j = seqList.length -1 ; j> location - 1; j--) {
            seqList.data[j] = seqList.data[j-1];
            printf("seqList.data[%d] = %d\n",j,seqList.data[j]);
        }
        seqList.data[location - 1] = value;
        return seqList;
    }
    ///< 顺序表的删除操作
    void deleteSeqlist(SeqList seqList,int location){
        int i;
        for (i = location - 1 ; i< seqList.length - 1; i++) {
            seqList.data[i] = seqList.data[i+1];
        }
        seqList.length --;
        printSeqList(seqList);
    }
    
    ///< 测试代码
    ///< 顺序表的表长
    void testSeqListLength(SeqList seqList){
        int length = printSeqListLength(seqList); ///< 1.求表长
        printf("表长:%d\n",length);
    }
    ///< 顺序表的插入操作
    void testSeqListInsertMethod(SeqList seqList){
        int location,value;
        printf("请输入要插入的位置:\n");
        scanf("%d",&location);
        printf("请输入要插入的值:\n");
        scanf("%d",&value);
        seqList = insertSeqList(seqList, location, value);
        printSeqList(seqList);
    }
    ///< 顺序表的删除操作
    void testSeqListDeleteMethod(SeqList seqList){
        int delLocation;
        printf("请输入要删除的元素的下标:\n");
        scanf("%d",&delLocation);
        deleteSeqlist(seqList, delLocation);
    }
    ///< 顺序表的查找操作
    void testSeqListSearchMethod(SeqList seqList){
        
        int location;
        printf("请输入您要查找的元素下标:\n");
        scanf("%d",&location);
        int data = getNodeInSeqList(seqList,location);  ///< 查找
        printf("表中第%d个元素是:%d\n",location,data);
        int value;
        printf("请输入表的值:\n");
        scanf("%d",&value);
        
        int * array = getNodeInSeqListWithValue(seqList, value);
        printf("%d\n",array[0]);
        printf("%d\n",array[1]);
    }
    int main(int argc, const char * argv[]) {
        SeqList seqList = initSeqList();
        printSeqList(seqList);
        testSeqListLength(seqList);       ///< 求表长
        testSeqListInsertMethod(seqList); ///< 顺序表的插入操作
        testSeqListDeleteMethod(seqList); ///< 顺序表的删除操作
        testSeqListSearchMethod(seqList); ///< 顺序表的查找操作
    
    
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:顺序表的基本操作(C语言)

          本文链接:https://www.haomeiwen.com/subject/bymurftx.html