数据结构考研复习(顺序表)

为了方便自己理解,将C和C++的实现进行了混合,主体内容基本上按照王道考研复习指导书的内容进行实现。

所使用的编译器为Code::Blocks 13.12

#include<stdio.h>
#define InitSize 100

typedef struct{
    int *data;
    int length;
}Sqlist;

/* -1- 初始化顺序表*/
bool init_list(Sqlist &L){
    L.data = new int[InitSize];
    L.length = 0;
    return true;
}

/* -2- 插入元素*/
bool insert_list(Sqlist &L, int i, int e){
    if(i < 1 || i > L.length + 1){
        printf("插入位置不合法!\n");
        return false;
    }

    if(L.length >= InitSize){
        printf("顺序表空间已满!\n");
        return false;
    }

    for(int j = L.length;j >= i;j--){
        L.data[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

/* -3- 获取元素*/
bool get_element(Sqlist L,int i,int &e){
    if(i < 1 || i > L.length)
    {
        printf("访问位置不合法!");
        return false;
    }
    e = L.data[i-1];
    return true;
}

/* -4- 删除元素*/
bool delete_element(Sqlist L,int i,int &e){
    if(i < 1 || i > L.length)
    {
        printf("访问位置不合法!");
        return false;
    }
    e = L.data[i-1];

    for(int j = i;j <L.length;j++)
    {
        L.data[j-1] = L.data[j];
    }
    L.length--;
    printf("删除成功!");
    return true;
}

/* -5- 查找元素*/
int locate_element(Sqlist L,int e){
    for (int i = 1;i < L.length;i++)
    {
        if(L.data[i] == e)
        {
            return i+1;
        }
    }
    return 0;//这里不能和前面一样返回true
}


int main(){
    /*初始化*/
    Sqlist L;

    if(!init_list(L))
    {
        printf("创建失败!\n");
    }
    else
    {
        printf("创建成功!\n");
        printf("==========\n");
    }

    int i, e_1, l;
    printf("请输入顺序表长度:\n");
    scanf("%d",&l);
    printf("依次输入%d个值\n",l);
    for(int i = 1;i <= l;i++){
        scanf("%d",&e_1);
        insert_list(L,i,e_1);
    }

    /*输出顺序表*/
    for(int i=1;i <= L.length;i++){
        int e_2;
        get_element(L,i,e_2);
        printf("%d  ",e_2);
    }
    printf("\n");

    /*查找元素*/
    printf("请输入要查找的元素:\n");
    int e_3;
    scanf("%d",&e_3);
    int temp = locate_element(L,e_3);
    if(!temp)
    {
        printf("顺序表中没有此值!\n");
    }
    else
    {
        printf("%d所处的位置是顺序表的第%d位\n",e_3,temp);
        printf("===============================\n");
    }
    /*删除元素*/
    printf("请输入要删除元素的位置:\n");
    int e_4,k;
    scanf("%d",&k);
    delete_element(L,k,e_4);
    /*再次输出顺序表*/
    printf("当前顺序表为:\n");
    for(int j = 1;j < L.length;j++){
        int e_5;
        get_element(L,j,e_5);
        printf("%d  ",e_5);
    }
    return 0;
}

 

 

 

 

 

posted on 2021-07-30 16:27  HOr7z  阅读(125)  评论(0编辑  收藏  举报