【数据结构 C语言】1.1.1顺序表(静态)考研复习实践

顺序表,顾名思义挨着一顺儿排下来的。在内存中也是如此(如图)。

1.1顺序表

使用C语言的结构体实现顺序表,定义如下


typedef struct

{

    int data[Maxsize];

    int length;

}Sqlist;

其中图1.1其实就是这个定义中的data[Maxsize]。如果对typedef使用不清楚的话,这个定义方式与如下等同,只是下面的简写


struct Sqlist

{

    int data[Maxsize];

    int length;

};

typedef struct Sqlist Sqlist;

完整代码


#include

#include

/**************

@chapter: 1.1.1

@author: zhaozihao

@time: 2020年2月24日

@Description: 实现静态顺序表

**************/

#define Maxsize 10

/*使用字符串比较函数的声明(用于消除警告可忽略)*/

int strcmp(const char*, const char*);

typedef struct

{

    int data[Maxsize];

    int length;

}Sqlist;

/*与上面的等价定义法*/

/*struct Sqlist

{

    int data[Maxsize];

    int length;

};

typedef struct Sqlist Sqlist;*/

/*初始化顺序表*/

void InitList(Sqlist *L)

{

    L->length = 0;

    int i;

    for(i = 0; i < Maxsize; i++)

        L->data[i] = 0;

    printf("初始化成功\n");

}

/*置空顺序表*/

void ClearList(Sqlist *L)

{

    int k;

    for(k = 0; k < L->length; k++)

        L->data[k] = 0;

    L->length = 0;

    printf("顺序表已置空\n");

}

/*在指定位置 i 插入元素 e*/

int Insert(Sqlist *L, int i, int e)

{

    if(L->length == Maxsize)

    {

        printf("表满\n");

        return 0;

    }

    if(L->length == 0)

    {

        L->data[0] = e;

        L->length++;

        printf("当前表长为%d\n", L->length);

        return 1;

    }

    if(i > L->length)

    {

        printf("插入位置不合理\n");

        return 0;

    }

    int k;

    for(k = L->length-1; k >= i-1; k--)

        L->data[k+1] = L->data[k];

    L->data[i-1] = e;

    L->length++;

    printf("插入 %d 当前表长 %d \n", e, L->length);

    return 1;

}

/*尾插法*/

int tail_insert(Sqlist *L, int e)

{

    if(L->length == Maxsize)

    {

        printf("表满了\n");

        return 0;

    }

    L->data[L->length] = e;

    L->length++;

    printf("尾插入 %d 当前表长 %d \n", e, L->length);

    return 1;

}

/*头插法*/

int head_insert(Sqlist *L, int e)

{

    if(L->length == Maxsize)

    {

        printf("表满\n");

        return 0;

    }

    int k;

    for(k = L->length-1; k >= 0; k--)

        L->data[k+1] = L->data[k];

    L->data[0] = e;

    L->length++;

    printf("头插入 %d 当前表长 %d \n", e, L->length);

    return 0;

}

/*删除指定位置元素*/

int delete_elem(Sqlist *L, int i)

{

    if(i < 1 || i > L->length)

    {

        printf("指定位置不合理\n");

        return 0;

    }

    int k;

    for(k = i - 1; k < L->length; k++)

        L->data[k] = L->data[k+1];

    L->length--;

    printf("删除第 %d 个元素当前表长 %d\n", i, L->length);

    return 1;

}

/*取得第i个元素*/

int getElem(Sqlist *L, int i)

{

    if(L->length == 0)

    {

        printf("表示空的\n");

        return 0;

    }

    if(i < 1 || i > L->length)

    {

        printf("位置不合理\n");

        return 0;

    }

    return L->data[i - 1];

}

/*打印, 值为e的元素的位置*/

int locateElem(Sqlist *L, int e)

{

    if(L->length == 0)

    {

        printf("表是空的\n");

        return 0;

    }

    int i;

    /*状态值status,默认表中不存在e,

    一旦发现存在则被置为true,如果直

    到循环结束仍为false就可判定不存在*/

    char * status = "false";

    for(i = 0; i < L->length; i++)

    {

        if(L->data[i] == e)

        {

            printf("%d是表中第%d个元素\n", e, i+1);

            status = "true";

        }

    }

    if(strcmp(status, "false") == 0)

        printf("表中不存在元素%d\n", e);

    return 1;

}

/*展示顺序表所有元素*/

void showList(Sqlist *L)

{

    if(L->length == 0)

    {

        printf("表示空的\n");

    }

    int k;

    for(k = 0;k < L->length; k++)

        printf("%d\t", L->data[k]);

        printf("\n");  //用于换行

}

/*判空函数*/

void empty(Sqlist *L)

{

    if(L->length == 0)

        printf("true\n");

    else

        printf("false\n");

}

/*程序主函数*/

int main()

{

    Sqlist seqlist;

    InitList(&seqlist);

    //empty(&seqlist);  //调用判空函数

    tail_insert(&seqlist, 11);

    tail_insert(&seqlist, 33);

    Insert(&seqlist, 2, 22);

    head_insert(&seqlist, 0);

    head_insert(&seqlist, -11);

    //empty(&seqlist);  //调用判空函数

    showList(&seqlist);

    delete_elem(&seqlist, 2);

    showList(&seqlist);

    locateElem(&seqlist, 22);

    locateElem(&seqlist, 999);

    ClearList(&seqlist);

    empty(&seqlist);  //调用判空函数

    return 0;

}

晚安各位研友!祝前程似锦

你可能感兴趣的:(【数据结构 C语言】1.1.1顺序表(静态)考研复习实践)