//链表线性存储
#include<iostream>
using namespace std;
class Date
{
public:
int date;
Date*next;
};
void show(Date*head); //显示函数
Date*creat(); //链表创建
int Length(Date*head); //长度函数
Date*FindKth(Date*head, int k); //找第k个节点的数
Date*find(Date*head, int m); //返回值为m的对象地址
Date*insert(Date*head, int m, int k); //将m插入到第k个结点
Date*Delete(Date*head, int k); //删除第k个结点
int main()
{
Date*head = NULL, *p = NULL;
head = creat();
show(head);
int l = Length(head);
cout << "长度:" << l << endl;
p = FindKth(head, 2);
cout << '\n' << p->date << endl;
head = insert(head, 34, 3);
show(head);
head = Delete(head, 3);
show(head);
return 0;
}
int Length(Date*head)
{
int i = 0;
while (head)
{
i++;
head = head->next;
}
return i;
}
Date*creat()
{
cout << "创建链表,以-1结束:" << endl;
Date*p = new Date;
cin >> p->date;
Date*p1 = p, *head = p;
while (1)
{
p1 = p;
p = new Date;
cin >> p->date;
if (p->date == -1) //遇到-1退出
{
delete p;
break;
}
p1->next = p;
}
p1->next = NULL;
return head;
}
void show(Date*head)
{
Date *p = head;
cout << "链表数据为:";
while (p)
{

cout << p->date << " ";
p = p->next;
}
cout << endl;
}
Date*FindKth(Date*head, int k)
{
int i = 1;
Date*p = head;
while (p&&i < k)
{
p = p->next;
i++;
}
if (k == i)
return p;
else
return NULL;
}
Date*find(Date*head, int m)
{
Date*p = head;
while (p&&p->date != m)
p = p->next;
return p;
}
Date*insert(Date*head, int x, int k)
{
Date*p = new Date;
Date*p1 = head, *l;
p->date = x;
int i;
if (k == 1) //插在头结点位置
{
p->next = head;
head = p;
}
else if (k > Length(head) + 1)
cout << "插入位置错误:" << endl;
else if (k == Length(head) + 1) //插在末尾位置
{
for (i = 1; i <k - 1; i++)
{
p1 = p1->next;
}
p1->next = p;
p->next = NULL;
}
else
{
for (i = 1; i <k; i++) //插在中间位置
{
l = p1;
p1 = p1->next;
}
l->next = p;
p->next = p1;
}
return head;
}
Date*Delete(Date*head, int k)
{
Date*p = head, *p1;
if (k == 1)
{
head = head->next; //删除头结点
delete p;
}
else if (k > Length(head))
cout << "删除不合法" << endl;
else
{
for (int i = 1; i < k; i++)
{
p1 = p; //删除中间结点
p = p->next;
}
p1->next = p->next;
delete p;
}
return head;
}

转载于:https://www.cnblogs.com/td15980891505/p/4397183.html

线性存储(链表存储)相关推荐

  1. 线性单链表存储结构c语言代码,单链表定义-(线性表的链表存储结构)

    线性表分为:顺序存储结构和连存储结构 顺序存储结构的优点: 1.空间利用率高,几乎不需要额外的空间开销. 2.数据的逻辑结构和物理结构完全一致. 3.结点地址计算的时间和线性表的规模大小无关. 4.可 ...

  2. 线性结构--离散存储 链表讲解

    数据结构大体成上可以分成两种: 1. 线性结构. 2. 非线性结构( 树,图) 1. 什么是线性结构        大概上可以这样定义: 加入所有的节点可以用一条直线连接起来. 就是线性结构... 2 ...

  3. 数据结构C语言实现系列——线性表(线性表链接存储(单链表))

    #include <stdio.h> #include <stdlib.h> #define NN 12 #define MM 20 typedef int elemType ...

  4. 广义表的存储结构--头尾链表存储表示/扩展线性链表存储表示

    //广义表的存储结构 //1.头尾链表存储表示 typedef enum {ATOM,LIST} ElemTag;//0:原子,1:子表 typedef struct GLNode {     Ele ...

  5. 线性表对于什么时候选用顺序表?什么时候选用链表作为线性表的存储结构为宜?

    在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有一下几方面的考虑: 基于空间的考虑.当要求存储的线性表长度变化不大,易于实现确定其大小时,为了节约存储空间,宜采用 ...

  6. 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.

    数据结构大体成上可以分成两种: 1. 线性结构. 2. 非线性结构( 树,图) 1. 什么是线性结构        大概上可以这样定义: 加入所有的节点可以用一条直线连接起来. 就是线性结构... 2 ...

  7. 线索二叉树(基于链表存储树结点)

    有以下场景 如果使用中序遍历,那么得到的顺序是:HDIBEAFCG,可以得知A的前驱结点为E,后继结点为F.但是,这种关系的获得是建立在完成遍历后得到的.如果我们每次想得到某个节点的前驱或者后继,都要 ...

  8. 5.3稀疏矩阵的十字链表存储

    十字链表产生原因:当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表. 十字链表特点: 每一个非零元开用含5个域的结点表示,其中i.j和e这3个域分别表示该非零 ...

  9. c++使用单向链表存储一组有序数据_数据结构笔试题基础

    第一章 数据结构与算法 一.算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法. 1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 2.算法的基本要素:算法中对 ...

  10. c语言建立并存储树,利用十字链表存储树结构(便于同时求出某一点的入度与出度)------C语言实现...

    #include #include #include /* 利用十字链表存储有向图,可用于同时查找某个顶点的出度与入度: */ typedef struct edge {//顶点表 int headv ...

最新文章

  1. js 404页面跳转
  2. 使用Newtonsoft.Json
  3. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
  4. ReviewForJob——java虚拟机的垃圾回收策略(个人总结)
  5. error C2065: “cout”: 未声明的标识符
  6. CodeFirst 表之间的关联
  7. shaderop的定义
  8. 鲲鹏之上的创新征程,鲲鹏应用创新大赛山西区域赛即将开启
  9. 拓端tecdat|在python 深度学习Keras中计算神经网络集成模型
  10. PHP call_user_func_array回调函数 call_user_func_array函数详解
  11. 【逼你学习】让自制力提升300%的时间管理方法、学习方法分享
  12. c语言且不用 怎么表示,“并且”用C语言怎么表示
  13. 用Java实现美女选妃
  14. raise_for_status()方法
  15. python做工控机_「上位机软件」工控机上位机软件的开发历程(一) - seo实验室...
  16. 第七篇 nacos 注册中心
  17. 快速了解K4B2G1646F-BYK0
  18. 2020华为校招软件测试:专业面试两轮的算法题
  19. Web项目 - 登录注册业务逻辑
  20. 大规模量产上车!明星自驾公司鉴智机器人火热招聘中(算法/规控/软件/产品海量岗位来袭)...

热门文章

  1. 基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
  2. puppet3.5源码包安装和配置
  3. 通过Qos 策略来对P2P限速
  4. ASP.Net新手项目经验谈
  5. mysql筛选向导后返回原表_Navcat关于导出向导的常见问题!
  6. ffmpeg开源工具的使用_使用这些开源工具来启动和运行您的业务
  7. 使用Java框架Pronghorn编写快速的应用程序
  8. 软件自动化测试成功之道_是什么使测试自动化成功?
  9. mssql 查询每个业务员_每个社区管理员应阅读的7本书
  10. 最佳 开源 人脸识别算法_开源项目的最佳社会结构是什么?