数据结构之线性表

数据结构之线性表

目录

1.线性表的概念

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

2.线性表的存储形式

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

  3.顺序表的构建

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

1
2
3
4
5
#define MAX_SIZE 500
typedef struct list{
    int elem[MAX_SIZE];
    int size;
}List;

 

  (2)顺序表的初始化

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

  (3)创建表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)向表中插入元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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)删除元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)查找元素

1
2
3
4
5
6
7
8
9
10
11
12
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)打印表

1
2
3
4
5
6
7
void print_list(const List& l){
    for(int i = 0; i < l.size; i++)
    {
        cout<<l.elem[i]<<" ";
    }
    cout<<endl;
}

  完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#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 @   孤峪  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示