两种创建方式,增删改查基本一样就写了一个。 特别简单没什么可讲的 比较值得注意的就是动态创建其实可以自动扩展,但是课上没讲我就没写。
还有一件事:插入删除等操作的具体描述是删除第i个元素还是删除下标为i的元素
//静态分配
#include<iostream>
using namespace std;
#define MaxSize 10 //顺序表的最大长度
typedef int ElemType;//定义顺序表的存储种类
//顺序表的创建
typedef struct {
ElemType data[MaxSize];
int length;//记录当前已存元素的个数
}SqList;
//顺序表的初始化函数
void InitList(SqList& L)
{
for (int i = 0; i < MaxSize; i++)
{
L.data[i] = 0;
}
L.length = 0;
}
//注意:插入删除等操作的具体描述是删除第i个元素还是删除下标为i的元素
//顺序表的插入操作
//第i个元素下标对应的是i-1,要先把i-1后的所有元素依次后移
bool ListInsert(SqList& L, int i, ElemType e)//在第i个元素后插入e
{
//先判断能否插入
if (L.length == MaxSize && (i<1 || i>L.length+1))
{
return false;
}
for (int j = L.length; j >= i; j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
return true;
}
//顺序表的删除操作
bool ListDelete(SqList& L, int i, int &e) //删除第i个元素,并用e来记录
{
if (i<1 || i>L.length)
{
return false;
}
e = L.data[i - 1];
for (int j = i; j < L.length; j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
//顺序表的查找分为按位查找和按值查找
//按位查找:找第i位
//按照查找:找与目标值相等的元素
//按位查找
ElemType GetElem(SqList L, int i)
{
return L.data[i - 1];
}
//按值查找返回位序即下标+1
int LocateElem(SqList L, ElemType e)
{
for (int i = 0; i < L.length; i++)
{
if (L.data[i] == e)
{
return i+1;
}
}
return 0;
}
//动态分配
#include<iostream>
using namespace std;
#define InitSize 10 //顺序表的初始长度
typedef int ElemType;//定义顺序表的存储种类
//顺序表的创建
typedef struct{
ElemType* data;
int Maxsize;//当前的最大长度
int length;//当前已存的元素个数
}SeqList;
//顺序表的初始化
void DInitList(SeqList& L) {
L.data = (ElemType*)malloc(sizeof(ElemType) * InitSize);
L.length = 0;
L.Maxsize = InitSize;
}
//动态增加长度
void IncreaseSize(SeqList& L, int len)
{
ElemType* p = L.data;
L.data = (ElemType*)malloc(sizeof(ElemType) * (MaxSize + len));
L.Maxsize += len;
for (int i = 0; i < L.length; i++)
{
L.data[i] = p[i];
}
free(p);
}