数据结构-顺序表的基本操作

1.顺序表的定义
2.顺序表的初始化
3.顺序表元素增删改查

#include<stdio.h>

#define MAXSIZE 20
typedef int ElemType;

typedef struct
{
    ElemType data[MAXSIZE];
    int length;


}SeqList;

SeqList init_list(){//初始化
    SeqList L;
    L.length =0;

    return L;
}

int list_length(SeqList *L){//获取长度
    return L->length;
}

int get_element(SeqList L,int i){//根据序号查找元素
    if(i<1 || i>L.length){
        printf("序号超出范围");
        return -1;
    }
    return L.data[i-1];


}

int list_locate(SeqList L,ElemType x){//根据元素查找位置
    int i;
    for(i=0; i<L.length;i++)
        if(L.data[i]==x)
            return (i+1);


        return -1;//未找到

}

void list_insert(SeqList *L, ElemType x,int i){ //插入元素

    int j;
    if (L->length == MAXSIZE)  printf("溢出,不能插入 \n");
    else if(i<1 || i > L->length+1) printf("插入范围出错 \n");
    else { for(j=L->length-1; j>=i-1; j--)
        L->data[j+1] =L->data[j];
    L->data[i-1] =x;
    L->length++;


    }

}

void list_delete(SeqList *L,int i){//删除元素
    int j;
    if(L->length<=0) printf("空表,无法删除元素");
    if(i>L->length || i<=0) printf("删除位置出错");
    else {
        for(j=i;j<=L->length-1;j++)
            L->data[j-1] =L->data[j];
        L->length--;
    }


}


SeqList list_scanf(SeqList L){ //创建链表
int x;
int i;
    printf("请输入顺序表的元素(-1结束)");
    for(i=0;;i++){
        scanf("%d",&x);
        if(x==-1){
            break;
        }
 L.data[L.length] = x;
 L.length++; 
    }

    return L;
}

void list_print(SeqList L){//打印链表
    int k;
    printf("顺序表的元素有:");
    for(k = 0; k<L.length;k++){
        printf("%3d ",L.data[k]);
    }
    printf("\n");

}


int main(){
        int pos;
        int key;
    SeqList L = init_list();
    L = list_scanf(L);

    list_insert(&L, 3, 2);

//    list_delete(&L,1);
     //pos= list_locate(L,2);
//    printf("查找到该元素位于:%d \n",pos);
//key = get_element(L,3);
//printf("该元素为:%d \n",key);
    list_print(L);
    printf("length:%d \n",list_length(&L));
    return 0;

}
文章目录
|