浅知线性表
顺序表(似数组)
-
优:通过下标直接存储。
-
缺:长度不可加;插入和删除操作时,移动大量元素。
初始化
List P;//定义一个表为P
P = (List)malloc(sizeof(struct LNode));//分配线性表的空间
L->length = 0;//设置空线性表的长度为0
增
- 在元素增加的位置及以后的元素全向后移动一个
int a[]={1,0,3,8,2,9};
int n= len(a);
for(int j=n;j>i;j--){//i为元素插入位置
a[j]=a[j-1];//向后挪一位
length++;//表长度加加
}
删
- 删除后,后面的元素向前移
for(int j=i;j<=n;j++){//从删除位置到表尾
a[j-1]=a[j];//向前挪一位(后一个代替前一个)
length--;//表长度减减
}
查
- 按序号查值
for(int i=0;i<=n;i++){//下标
if(e = a[i]){cout<<a[i];}//如果找到与值e匹配的下标,输出值
}
- 按值找序号
int i=0;
while(i<n&&a[i]!=e)//查找元素
i++;
if(i>=n)//一直找到表尾
return 0;
else
return i+1;//返回序号,序号=下标+1
链表(单)
-
优:插入和删除操作时,不移动元素,只需改变指针指向。
-
缺:查找较慢。
初始化
P = (LinkNode)malloc(sizeof(LinkNode));
P->next = NULL;//创建头结点,其next域置为空
增
(1)中间插入
s->next = p->next;
p->next = s;
(2)头插法
s->next = L->next;//将s结点插入首节点之前,头结点之后
L->next = s;//头结点之后
(3)尾插法
r->next=s;//假设r始终指向尾结点,将s插入到结点r之后
r=s;//让s成为尾结点
删
q = p -> next;//q为待删结点,p为q的前结点
p -> next = q -> next;//删除操作,把p的下一个结点直接改成q的下一个结点
free(q);//释放删除掉的空间
查
- 按序号查值
int j = 0;
LInkNode *p = L;//p指向头结点
if(i<=0)retrun false;
while(j<i&&p!=NULL)//遍历找第i个结点p
{
j++;
p=p->next;
}
if(p==NULL)
return false;//遍历完还没找到
else
{
e= p->data;//找到
return turn;
}
- 按值找序号
int i = 1;//序号从1开始
LInkNode *p = L->next;//创建头结点,指向首结点
while(p!=NULL&&p->data!=e)//查找值为e的结点,其序号为i
{
p=p->next;
i++;
}
if(p==NULL)//不存在时
return(0);
else//找到值为e的点,返回其序号
return(i);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人