数据结构之顺序表

构造一个空的顺序表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define MAX_SIZE 100
 
typedef struct
{
    int *address;//基地址
    int length;//顺序表长度
    int size;//顺序表总空间
}LIST;
 
//创建一个空的顺序表
bool initList(LIST& list)
{
    list.address = new int[MAX_SIZE];
    if (!list.address) return false;
 
    list.length = 0;
    list.size = MAX_SIZE;
    return true;
}

  尾部添加数据

1
2
3
4
5
6
7
8
bool addPUSH(LIST& list,int data)
{
    if (list.length >= MAX_SIZE) return false;
 
    list.address[list.length] = data;
    list.length++;
    return true;
}

  范围内插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool ListInsert(LIST& list, int i, int data)
{
    if (i < 0 || i >= 100) return false;
    if (list.length == MAX_SIZE) return false;
 
    for (int j = list.length-1; j >= i; j--)
    {
        list.address[j + 1] = list.address[j];//从最后一个元素开始后移,直到第 i 个元 素后移
    }
 
    list.address[i] = data;//将新元素 e 放入第 i 个位置
    list.length++;//表加一
    return true;
}

  删除元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool Listdelete(LIST& list, int addr)
{
    if (addr<0 || addr>list.length) return false;
 
    if (addr == list.length - 1)
    {
        list.length--;
        return true;
    }
 
    for (int i = addr; i < list.length; i++)
    {
        list.address[i] = list.address[i +1];
    }
    list.length--;
    return true;
}

  

  根据数据删除元素

复制代码
bool deletedatalist(LIST& l, int data)
{
    
        for (int i = 0; i < l.length; i++)
        {
            if (l.addrss[i] == data)
            {
                for (int j = i; j < l.length; j++)
                {
                    l.addrss[j] = l.addrss[j + 1];
                    
                }
                l.length--;
                return true;
            }

        }
     return false;
}
复制代码

 

  顺序表销毁

1
2
3
4
5
6
7
bool destroyList(LIST& list)
{
    if (list.address) delete []list.address;
    list.length = 0;
    list.size = 0;
    return true;
}

  main函数

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
LIST list;
 
    cout << "初始化顺序表" << endl;
    if (initList(list))
    {
        cout << "顺序表初始化成功" << endl;
         
    }
 
    int count = 0;
    cout << "追加个数\t" ;
    cin >> count;
    int data = 0;
    for (int i = 0; i < count; i++)
    {
        cout << "参数:\t";
        cin >> data;
        cout<<endl;
        addPUSH(list, data);
    }
    listPrint(list);
 
    cout << "插入位置:\t" ;
    cin >> count;
        cout << "参数:\t";
        cin >> data;
        cout << endl;
        ListInsert(list, count, data);
 
        listPrint(list);
         
        cout << "所需删除的数据的地址:" ;
        cin >> data;
        if (Listdelete(list, data)) cout << "\t删除成功" << endl;
        else cout << "\t删除失败" << endl;
        listPrint(list);cout << "顺序表销毁..." << endl;
        destroyList(list);
        listPrint(list);
    system("pause");

 

  编译环境VS2019

注:如有错误请与我联系,万分感谢!!!

posted @   乐吴  阅读(61)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示