当前位置: 首页 > news >正文

实验3-单链表(优化版/王道版)

单链表结构体

typedef int ElemType;
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,* LinkList;

单链表的初始化

void InitList(LinkList &L)
{L=new LNode;L->next=NULL;
}

打印单链表

void visit(LinkList L)
{L=L->next;while(L){cout<<L->data<<" ";L=L->next;}cout<<endl;
}

头插法建表

void HeadInsert(LinkList &L)
{InitList(L);LinkList p=NULL;ElemType e;cin>>e;while(e!=9999){p=new LNode;p->data=e;p->next=L->next;L->next=p;cin>>e;}
}

尾插法建表

void TailInsert(LinkList &L)
{InitList(L);LinkList p;LinkList r=L;ElemType e;cin>>e;while(e!=9999){p=new LNode;p->data=e;r->next=p;r=p;cin>>e;}r->next=NULL;
}

求表长操作

int Length(LinkList L)
{int len=0;L=L->next;while(L){len++;L=L->next;}return len;
}

按位查找结点

LinkList GetElem(LinkList L,int i)
{if(i<0) return NULL;int j=0;while(L && j<i){L=L->next;j++;}return L;
}

按值查找结点

LinkList LocateElem(LinkList L,ElemType e)
{L=L->next;while(L && L->data!=e) L=L->next;return L;
}

插入结点

bool ListInsert(LinkList &L,int i,ElemType e)
{LinkList p=GetElem(L,i-1);if(p==NULL) return false;LinkList s=new LNode;s->data=e;s->next=p->next;p->next=s;return true;
}

删除结点

bool ListDelete(LinkList &L,int i,ElemType &e)
{LinkList p=GetElem(L,i-1);if(p==NULL || p->next==NULL) return false;LinkList s=p->next;e=s->data;p->next=s->next;delete s;return true;
}

main函数

int main()
{LinkList L;ElemType e;HeadInsert(L);//5 4 3 2 1 9999
//	TailInsert(L);//1 2 3 4 5 9999visit(L);cout<<"len:"<<Length(L)<<endl;cout<<"elem:"<<GetElem(L,5)->data<<endl;cout<<"pos:"<<LocateElem(L,5)<<endl;ListInsert(L,6,6);visit(L);ListDelete(L,6,e);visit(L);return 0;
}

完整代码

	#include <iostream>using namespace std;typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode,* LinkList;void InitList(LinkList &L){L=new LNode;L->next=NULL;}void visit(LinkList L){L=L->next;while(L){cout<<L->data<<" ";L=L->next;}cout<<endl;}void HeadInsert(LinkList &L){InitList(L);LinkList p=NULL;ElemType e;cin>>e;while(e!=9999){p=new LNode;p->data=e;p->next=L->next;L->next=p;cin>>e;}}void TailInsert(LinkList &L){InitList(L);LinkList p;LinkList r=L;ElemType e;cin>>e;while(e!=9999){p=new LNode;p->data=e;r->next=p;r=p;cin>>e;}r->next=NULL;}int Length(LinkList L){int len=0;L=L->next;while(L){len++;L=L->next;}return len;}LinkList GetElem(LinkList L,int i){if(i<0) return NULL;int j=0;while(L && j<i){L=L->next;j++;}return L;}LinkList LocateElem(LinkList L,ElemType e){L=L->next;while(L && L->data!=e) L=L->next;return L;}bool ListInsert(LinkList &L,int i,ElemType e){LinkList p=GetElem(L,i-1);if(p==NULL) return false;LinkList s=new LNode;s->data=e;s->next=p->next;p->next=s;return true;}bool ListDelete(LinkList &L,int i,ElemType &e){LinkList p=GetElem(L,i-1);if(p==NULL || p->next==NULL) return false;LinkList s=p->next;e=s->data;p->next=s->next;delete s;return true;}int main(){LinkList L;ElemType e;HeadInsert(L);//5 4 3 2 1 9999//	TailInsert(L);//1 2 3 4 5 9999visit(L);cout<<"len:"<<Length(L)<<endl;cout<<"elem:"<<GetElem(L,5)->data<<endl;cout<<"pos:"<<LocateElem(L,5)<<endl;ListInsert(L,6,6);visit(L);ListDelete(L,6,e);visit(L);return 0;}

输出示例

5 4 3 2 1 9999
1 2 3 4 5
len:5
elem:5
pos:0xc56a20
1 2 3 4 5 6
1 2 3 4 5

相关文章:

  • 前端面试题日常练-day63 【面试题】
  • 881. 救生艇
  • maven多模块项目搭建
  • Jenkins构建 Maven项目(微服务)并自动发布
  • Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)
  • ES6中如何使用class和extends关键字实现继承?
  • 基于SpringBoot二手图书管理系统
  • 技术前沿 |【大模型BLIP-2的多模态训练】
  • 从零开始,手把手教你文旅产业策划全攻略
  • 【Java】解决Java报错:ArrayIndexOutOfBoundsException
  • 服务器升级Nacos2.2.3报错、rocksdb报错问题处理
  • PromptPort:为大模型定制的创意AI提示词工具库
  • 【实战JVM】-实战篇-06-GC调优
  • 首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题
  • 为什么考试总是无法发挥正常水平?
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • android图片蒙层
  • Cookie 在前端中的实践
  • es6要点
  • MySQL数据库运维之数据恢复
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • nginx 配置多 域名 + 多 https
  • PHP 的 SAPI 是个什么东西
  • Vue 动态创建 component
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于Flux,Vuex,Redux的思考
  • 模型微调
  • 容器服务kubernetes弹性伸缩高级用法
  • 我的面试准备过程--容器(更新中)
  • 小程序button引导用户授权
  • 追踪解析 FutureTask 源码
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​一些不规范的GTID使用场景
  • ###C语言程序设计-----C语言学习(3)#
  • #NOIP 2014# day.1 T2 联合权值
  • #stm32整理(一)flash读写
  • (28)oracle数据迁移(容器)-部署包资源
  • (Java数据结构)ArrayList
  • (pytorch进阶之路)扩散概率模型
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十六)Flask之蓝图
  • (十三)Flink SQL
  • (四)opengl函数加载和错误处理
  • (五)Python 垃圾回收机制
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .Net Web项目创建比较不错的参考文章
  • .NET简谈设计模式之(单件模式)
  • .vimrc 配置项
  • /var/lib/dpkg/lock 锁定问题