数据结构之线性表

数据结构之线性表

目录

1.线性表的概念

    线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。

2.线性表的存储形式

  (1)顺序存储和链式存储(顺序存储,数据在逻辑和物理上地址都是相连的,链式存储,数据在逻辑上是相连的,但实际的物理地址却不一定相连。)

  3.顺序表的构建

  (1)顺序表的结构体创建

#define MAX_SIZE 500
typedef struct list{
    int elem[MAX_SIZE];
    int size;
}List;

 

  (2)顺序表的初始化

bool init(List& l){
    l.size = 0;
    return true;
}

  (3)创建表

bool create_list(List& l){
    int x;
    cout<<"请输入元素(整数:)";
    cin>>x;
    while (x != -1)
    {
        if (l.size == MAX_SIZE)
        {
            break;
        }
        l.elem[l.size] = x;
        l.size++;
        cout<<"请输入元素(整数:)";
        cin>>x;
    }
    return true;
}

  (4)向表中插入元素

bool insert_x_pos(List& l, const int x, const int pos){
    if(pos < 1 || pos > l.size + 1)
    {
        cout<<"位置不合法,插入失败"<<endl;
        return false;
    }
    else if(pos  == l.size + 1)
    {
        l.elem[pos - 1] = x;
        l.size++;
    }
    else{
        for(int i = l.size; i >= pos - 1; i--)
        {
            l.elem[i] = l.elem[i-1];
        }
        l.elem[pos - 1] = x;
        l.size++;
    }
    cout<<"插入成功"<<endl;
    return true;
}

  (5)删除元素

bool delete_x_pos(List& l, const int pos){
    if(pos == l.size)
    {
        l.size--;
    }
    else{
        for(int i = pos - 1; i < l.size; i++)
        {
            l.elem[i] = l.elem[i + 1];
        }
        l.size--;
    }
    return true;
}

  (6)查找元素

int search_x_pos(List& l, const int x){
    int tem = -1;
    for(int i = 0; i < l.size ; i++)
    {
        if(l.elem[i] == x)
        {
            tem = i + 1;
            break;
        }
    }
    return tem;
}

  (7)打印表

void print_list(const List& l){
    for(int i = 0; i < l.size; i++)
    {
        cout<<l.elem[i]<<" ";
    }
    cout<<endl;
}

  完整代码

#include<iostream>
using namespace std;
#define MAX_SIZE 500
typedef struct list{
    int elem[MAX_SIZE];
    int size;
}List;
bool init(List& l){
    l.size = 0;
    return true;
}
bool create_list(List& l){
    int x;
    cout<<"请输入元素(整数:)";
    cin>>x;
    while (x != -1)
    {
        if (l.size == MAX_SIZE)
        {
            break;
        }
        l.elem[l.size] = x;
        l.size++;
        cout<<"请输入元素(整数:)";
        cin>>x;
    }
    return true;
}
int get_size(const List& l){
    return l.size;
}
bool insert_x_pos(List& l, const int x, const int pos){
    if(pos < 1 || pos > l.size + 1)
    {
        cout<<"位置不合法,插入失败"<<endl;
        return false;
    }
    else if(pos  == l.size + 1)
    {
        l.elem[pos - 1] = x;
        l.size++;
    }
    else{
        for(int i = l.size; i >= pos - 1; i--)
        {
            l.elem[i] = l.elem[i-1];
        }
        l.elem[pos - 1] = x;
        l.size++;
    }
    cout<<"插入成功"<<endl;
    return true;
}
bool delete_x_pos(List& l, const int pos){
    if(pos == l.size)
    {
        l.size--;
    }
    else{
        for(int i = pos - 1; i < l.size; i++)
        {
            l.elem[i] = l.elem[i + 1];
        }
        l.size--;
    }
    return true;
}
int search_x_pos(List& l, const int x){
    int tem = -1;
    for(int i = 0; i < l.size ; i++)
    {
        if(l.elem[i] == x)
        {
            tem = i + 1;
            break;
        }
    }
    return tem;
}
void print_list(const List& l){
    for(int i = 0; i < l.size; i++)
    {
        cout<<l.elem[i]<<" ";
    }
    cout<<endl;
}
void test(List& l)
{
    init(l);
    create_list(l);
    print_list(l);
    cout<<"表的长度:"<<get_size(l)<<endl;
    int insert_x, insert_pos, delete_pos, search_x, pos;
    cout<<"请输入想插入的元素和位置(1~l.size + 1):";
    cin>>insert_x>>insert_pos;
    insert_x_pos(l,insert_x,insert_pos);
    cout<<"插入"<<insert_x<<"后表中的元素:";
    print_list(l);
    cout<<"请输入你想删除的元素的位置(1~l.size):";
    cin>>delete_pos;
    delete_x_pos(l,delete_pos);
    cout<<"删除第"<<delete_pos<<"个元素后表中的元素:";
    print_list(l);
    cout<<"请输入你想查找元素:";
    cin>>search_x;
    pos = search_x_pos(l,search_x);
    if(pos == -1)
    {
        cout<<"表中没有这个元素!"<<endl;
    }
    else{
        cout<<"该元素在表中的第"<<pos<<"位置"<<endl;
    }
}
int main()
{
    List l;
    test(l);
    return 0;
}

  

 

posted @ 2022-05-25 17:53  孤峪  阅读(22)  评论(0)    收藏  举报