1.实为数组,只不过以结构体形式出现,而多出来一个长度,并且可以定义出指针(--同数组名)
这里只谈写法,暂不谈概念oOAOo
2023.4.5 --想把这个叫做--"快速写一个线性表"(写文的目的也是方便自己以后再次快速的实现出来)
2.定义四板
(一) typedef板
typedef struct LNode *List;
(二) struct板
struct LNode{
//数组类型 可以是int double...
int Data[MAXSIZE]; // 当然你得在前面就定义一个MAXSIZE
//长度
int Last;
};
(三) LNode建 (线性表)
LNode L;
(四) List建(指针)
List PtrL;
3.初始化
List MakeEmptyList()
{
//先在此函数内建立一个指针
List L;
//用该指针指向创建出的空间(malloc法)
//2023.4.5-- 前指针后结构体
L = (List) malloc (sizeof(struct LNode));
//判断是否申请空间成功
if(L == NULL)
return NULL;
//再将此指针的last 赋上 -1 (表示数组数据为空)
//因为要使下标从零开始
L->Last=-1;
//返回此L
return L;
}
接下来是操作这个表--增删改查
1) 查找
int Find(int x, List PtrL)
{
//用i做下标 while来查找
int i=0;
while(i <= PtrL->Last && PtrL[i] != x)
i++;
//超出表长的判断
if(i > PtrL->Last) return -1;
else return i;
}
2)插入
//用bool 以返回true or false 来判断是否插入成功
bool Insert(int x, int i, List PtrL)
{
int i;
//1)先判Last == MAXSIZE - 1 (表满)
if(PtrL->Last == MAXSIZE - 1)
{
cout<<"线性表已满"<<endl;
return false;
}
//2)再判插入位置 i < 1 || i > Last + 1
if(i < 1 || i > PtrL->Last + 1)
{
cout<<"插入位置不合法"<<endl;
return false;
}
//3)开始移动 j 从Last开始 到 i-1
for(int j = PtrL->Last ;j >= i-1 ;j--)
{
Data[j+1]=Data[j];
}
//4)此时 i-1 的位置空了出来,将x放进去即可
Data[i-1] = x;
//5)最后莫忘了要将表长加长 PtrL->Last++
PtrL->Last++;
3)删除
void Delete(int i, List PtrL)
{
//1)同样的 判断删除位置合不合理
if(i < 1 || i > PtrL->Last)
{
cout<<"删除位置不合法"<<endl;
return;
}
//2)开始循环 定义j 从i-1 到 Last
for(int j = i-1;j<PtrL->Last;j++)
{
Data[j]=Data[j+1];
}
//最后将Last--即可
PtrL->Last--;
}
以上是个人在学习过程中的一些总结,有错误和遗漏请加以指出错误,感谢!
交流与学习提升技术,一起向上!