数据结构—链表

线性表:具有相同特性的数据元素的一个有限序列

特性:①有穷性(元素的个数有限)②一致性(所有元素的性质相同)③序列性(相对位置是线性的)

顺序表:线性表的顺序存储结构

结构体定义:

typedef stuct
{
ElemType data[MaxSize];//元素
int length;//长度
}SqList;

建立:

复制代码
void CreatList(SqList * &L,ElemType a[],int n)
{

int i=0,k=0;
L=(SqList *)malloc(sizeof(SqList));
while(i<n)
{
L->data[k]=a[i];
k++,i++;
}
L->length =k;
}
复制代码

初始化:InitList(&L)

void InitList(* &L){

L=(SqList *)malloc(sizeof(Sqlist));
L->length =0;//长度设置为0
}

销毁:DestoryList(&L)

void DestroyList(SqList *&L){
free(L);
}

判断是否为空表:ListEmpty(L)

bool ListEmpty(SqList *L)
{
return(L->length==0);
}

求线性表的长度:ListLength(L)

int ListLength(SqList *L){
return (L->length);
}

输出线性表:DispList(L)

复制代码
void DispList(SqList *L)
{
for(i=0;i<L->length;i++)
printf("%d",L->data[i]);
printf("\n");
)
复制代码

求线性表某个数据元素的值:GetElem(L,i,&e)

复制代码
bool GetElem(SqList *L,int i,ElemType &e)
{
if(i<1||i>L->length)
return flase;
e=L->data[i-1];
return true;
)
复制代码

按元素查找 LocateElem(L,e)

复制代码
int LocateElem(SqList *L,ElemType e)
{
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>L->length)
return 0;
else 
return i+1;
}
复制代码

插入数据元素ListInsert(&L,i,e)

复制代码
bool ListInsert(SqList *&L,int i,ElemType e){

int j;
if(i<1||i>L->length+1||L->length==Maxsize)
return flase;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];//往后面移位
L->data[i]=e;//插入到i这个位置
L->length++;//成功长度加一
return true;
}
复制代码

删除数据元素ListDelete(&L,i,&e)

复制代码
bool ListDelete(SqList *&L,int i,ElemType &e){
int j;
if(i<1||i>L->length+1)
return flase;
i--;
e=L->data[i];
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
复制代码

例子:删除所有值为x的元素

复制代码
void delnode1(SqList *&L,ElemType x)
{
int i,k=0;
for(i=0;i<L->length;i++){
if(L->data[i]!=x)
{L->data[k]=L->data[i];//重新构建线性表
  k++;
}
else
continue;//可以不写
}
L->length=k;
}
复制代码
复制代码
void delnode2(SqList *&L,ElemType x){
int k=0,j=0;
while(i<L->length){
       if(L->data[i]==x)
     k++;//记录有多少个X
 else
 L->data[i-k]=l->data[i];//向前以动K个X位置
i++;
}
复制代码

案例二:以第一个元素为分界线,将小于它的数放在前面,大于它的数放在后面

复制代码
int partition(SqList *&L)
{
int i=0;j=l->length-1;
ElemType pivot=L->data[0];
while(i<j)
{
while(i<j&&L->data[j]>pivot)
j--;
while(i<j&&L->data[i]<=pivot)
i++;
if(i<j)
swap(L->data[i],L->data[j]);
}
swap(L->data[0],L->data[i]);
}
复制代码

 

posted @   小白糖  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示