关于顺序表简单的四个基本操作的理解和算法

你们的点赞收藏是我继续前进的动力!


前言

关于顺序表,我们大概学完了c的基础知识之后,就要做一份类似于学生管理系统的课设,而顺序表的相关增删改查是实现这个课设的基本程序之一,以及为后面数据结构打下两种表的基础。


一、什么是顺序表?

学了计算机导论的大家应该对集合表、树、图这些东西不会很陌生,而表主要是关于将一连串的数据以数组的形式并按有序的情况进行存储。

二、顺序表的使用

1.顺序表的结构体

我附上了要c++的头文件与其需要的头文件和宏定义

#include <iostream>
#include <malloc.h>
using namespace std;
#define MaxSize 100 //定义线性表的最大长度
typedef struct //用typedef创建结构体类型
{
	int data[MaxSize]; //顺序表的元素
	int length; //顺序表的当前长度
}SqList; //顺序表的类型定义

2.顺序表的创建

通过malloc函数来开辟数组空间

//开辟空间
void CreateList(SqList*& L, char a[], int n)
{
    L = (SqList*)malloc(sizeof(SqList)); //分配存放线性表的空间
    for (int i = 0; i < n; i++)
    {
        L->data[i] = a[i];
    }
    L->length = n;
}

3.顺序表的初始化操作

//初始化顺序表
void InitList(SqList &L) //形参为引用类型
{
	L.length=0; //顺序表初始长度为0
}

4.顺序表的数据插入

//插入元素
bool ListInsert(SqList*& L, int i, char e)
{
    int j;
    if (i<1 || i>L->length + 1 || L->length == MaxSize)   //i的取值范围应在1~L.length+1之间,
        return false;                                    //如果线性表当前的长度已经是最大长度,则无法插入
    i--;
    for (j = L->length; j > i; j--)
    {
        L->data[j] = L->data[j - 1];   //第i位以及之后的每个元素向后移
    }
    L->data[i] = e;   //将元素插入到第i个位置
    L->length++;    //顺序表长度+1
    return true;
}

详细如图所示:
在这里插入图片描述

5. 顺序表的数据删除

//删除元素
bool ListDelete(SqList*& L, int i, char& e)
{
    int j;
    if (i<1 || i>L->length)   //i的取值范围应在1~L.length之间
    {
        return false;
    }
    i--;
    e = L->data[i];
    for (j = i; j < L->length - 1; j++)
    {
        L->data[j] = L->data[j + 1];   //第i位之后的每个元素向前移
        L->length--;             //顺序表长度-1
    }
    return true;
}

6.顺序表的数据查找

//用元素查找位置
int LocateElem(SqList* L, char e)
{
    int i = 0;
    while (i < L->length&& L->data[i] != e)  /*按元素值査找,返回L中第一个值域与e相等的
                                             元素的序号 ,若这样的元素不存在,则返回值为0*/
    {
        i++;
    }
    if (i >= L->length)
        return 0;
    else
        return i + 1;

}

7.顺序表的数据修改

其实顺序表的数据修改基于查找后进行赋值给找到的位置即可

void amendElem(SqList* L, char e)
{
    int i = 0;
    char x;
    while (i < L->length && L->data[i] != e)  /*按元素值査找,返回L中第一个值域与e相等的
                                             元素的序号 ,若这样的元素不存在,则返回值为0*/
    {
        i++;
    }
    if (i >= L->length)
    {
     cout<<"没有找到该元素"<<endl;   
    }
    else {
        i=i+1;
        cout << "请输入要修改的值:" << endl;   
        cin >> x;
        L->data[i] = x;    //将要修改的值赋值给查找到的位置的data值
    }
     
}

总结

以上便是顺序表的4大基本操作的解析和源码,若要使用直接main函数调用对应的功能函数即可。如果要用来写系统,建议把每个函数的类型改为void,方便数据存储。本人初次在本站发表文章,若有错误请勿见怪,有不懂可以私信我。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜的桐谷和人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值