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

#include 
#include 

///<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语言))