前几章已经介绍到了顺序存储、链式存储

顺序存储:初始化、插入、删除、定位

链式存储:初始化、插入、删除、定位

顺序存储:初始化

strudt student{
int ID;//ID
char name[30];//姓名
char sex; //性别
int class;//班级
int age;//年龄 }
student={"01",“zhangsan”,"m","201","20"};

  

链式存储:初始化

//建立一个空链表
LinkList InitiateLinkList(){
LinkList head; //头指针
head =malloc (sizeof(node)); //动态构建一节点,它是头结点
head->next=null;
return head;

顺序存储:插入

void InsertSeqlist(SeqList ,DataType x,int i){
//将元素x插入到顺序表中L的第i个数据元素之前
if(L.length==Maxsize)
exit("表已满");
if(i<||i>L.ength+)
exit("位置错误");
for(j=L.length;j>=i;j--) //初始化
L.data[j]=L.data[j-];//依次后移
L.data[j-]=x;//元素x到下标为i-1的位置
L.length++;//表长度加1 }

链式存储:插入

void InsertLinklist (LinkList head, DataType x, int i)
//在表head的第i个数据元素结点之前插入一个以x为值的新结点
{
Node *p,*q;
if (i==) q=head;
else q=GetLinklist (head, i-); //找第 i-1个数据元素结点
if (q==NULL) //第i-1个结点不存在
exit(“找不到插入的位置”);
else
{
p=malloc(sizeof (Node) );p->data=x; //生成新结点
p->next=q->next; //新结点链域指向*q的后继结点
q->next=p; //修改*q的链域
}
}

顺序存储的插入i是先将插入后面的往后移动插入i-1个位置,空出插入的地方在进行插入

链式存储:插入结点d,先将d的尾结点连接到b的首结点,接着d的首结点连接a的尾结点,放弃a到b之间的连接

顺序存储:删除

 void DeleteSeqList(SeqList L,int i) {
//删除线性表L中的第i个数据结点
if(i< || i>L.length) //检查位置是否合法
exit(“非法位置”);
for(j=i;j<L.length;j ++) //第i个元素的下标为i-1
L.data[j-]=L.data[j]; //依次左移
L.length--; //表长度减1
}

链式存储:删除

void DeleteLinklist(LinkList head, int i)
//删除表head的第i个结点
{
Node *q;
if(i==) q=head;
else q=GetLinklist(head, i-); //先找待删结点的直接前驱
if(q !== NULL && q->next != NULL) //若直接前驱存在且待删结点存在
{
p=q->next; //p指向待删结点
q->next=p->next; //移出待删结点
free(p); //释放已移出结点p的空间
}
else exit (“找不到要删除的结点”); //结点不存在
}

数据存储:定位

int LocateSeqlist(SeqList L, DataType x)
{
int i=;
while ((i<L. length) && (L.data[i]!=x) ) //在顺序表中查找值为 x 的结点
i++;
if(i<L.length) return i+; //若找到值为x的元素,返回元素的序号
else return ; //未查找到值为x的元素,返回0
}
//顺序表的求表长操作,直接输出L.length即可

链式存储:定位

int LocateLinklist (LinkList head ,Data Type x){
//求表head中第一个值等于x的结点的序号,若不存在这种结点,返回结果为0
Node *p=head;//p是工作指针
p=p->next;//初始时P指向首结点
int i=;//i代表 结点的序号,这里初值为
while(p!=null&&p->data!=x){//访问链表
i++;
p=p->next;
}
if(p!=null)
return i+;
else return ;}

数据结构导论 四 线性表的顺序存储VS链式存储的更多相关文章

  1. 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...

  2. 线性表的顺序存储和链式存储的实现(C)

    //线性表的顺序存储 #include <stdio.h>typedef int DataType;#define MaxSize 15//定义顺序表typedef struct { Da ...

  3. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  4. c数据结构 -- 线性表之 复杂的链式存储结构

    复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...

  5. 线性表的Java实现--链式存储(单向链表)

    单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在 ...

  6. 线性表的Java实现--链式存储(双向链表)

    有了单向链表的基础,双向链表的实现就容易多了. 双向链表的一般情况: 增加节点: 删除节点: 双向链表的Java实现: package com.liuhao.algorithm;      publi ...

  7. C 数据结构1——线性表分析(顺序存储、链式存储)

    之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...

  8. Java实现线性表-顺序表示和链式表示

    顺序表示和链式表示的比较: 1.读写方式:顺序表可以顺序存取,也可以随机存取:链表只能从表头顺序存取元素: 2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻:链式存储时, ...

  9. 队列的顺序存储与链式存储c语言实现

    一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...

随机推荐

  1. leetcode字节跳动专题(持续更新)

    挑战字符串 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...

  2. 【转】Nginx + CGI/FastCGI + C/Cpp

    接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...

  3. nessus安装、msfconsole辅助模块使用(网安全实训第三天)

    本期内容:nessus安装.msfconsole辅助模块使用.后渗透攻击 1. nessus安装 2.msfconsole辅助模块使用 3.后渗透攻击 1. nessus安装 (1)下载nessus ...

  4. Java中final修饰的数据

    目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...

  5. 【hibernate】映射继承关系

    [hibernate]映射继承关系 转载:https://www.cnblogs.com/yangchongxing/p/10405151.html ========================= ...

  6. Vue ---- 组价 组件化 子传父 父传子

    目录 补充js的for循环: 组件 1.组件的分类: 2.组件的特点 3.创建局部组件 4.全局组件 二.组件化 一.组件传参父传子 二.组件传参:子传父 补充js的for循环: // for in遍 ...

  7. 《Java基础知识》Java super关键字

    super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类. super也有三种用法: 1.普通的直接引用 与this类似,super相当于是指向当前对象的父类,这样 ...

  8. 十分钟学会Markdown基本语法

    文章目录 Markdown 语法 一.标题 这是一级标题 这是二级标题 这是三级标题 这是四级标题 这是五级标题 这是六级标题 二.字体 三.引用 四.分割线 五.图片 六.超链接 七.列表 八.表格 ...

  9. 百万级高并发mongodb集群性能数十倍提升优化实践

    背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采 ...

  10. C# 几种常见数据结构

    一.内存上连续存储,节约空间,可以索引访问,读取快,增删慢 Array:在内存上连续分配的,而且元素类型是一样的,可以坐标访问;读取快--增删慢,长度不变 { //Array:在内存上连续分配的,而且 ...