你们的点赞收藏是我继续前进的动力!
前言
关于顺序表,我们大概学完了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,方便数据存储。本人初次在本站发表文章,若有错误请勿见怪,有不懂可以私信我。