线性表
  定义:线性表是具有相同特性的数据元素的一个有限序列
  类型:
    1:顺序存储结构
      定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构
      算法:

    #include <stdio.h>
#define LIST_INIT_SIZE 100
#define ERROR 0
#define OK 1 typedef struct{
// 线性表的顺序存储结构
int numbers[LIST_INIT_SIZE];
int length;
}Sqlist;
int ListInsert_Sq(Sqlist * sl,int i,int number);
int ListDelete_Sq(Sqlist * sl,int i);
int main(void){
Sqlist x;
x.numbers[] = ;
x.numbers[] = ;
x.numbers[] = ;
x.length = ; printf("数组长度:%d\n",x.length);
// 插入线性表 在1的位置插入值5
ListInsert_Sq(&x,,);
printf("数组长度:%d\n",x.length);
ListDelete_Sq(&x,);
printf("数组长度:%d\n",x.length);
} // 插入算法
int ListInsert_Sq(Sqlist * sl,int i,int number){
if(i < || i >= sl->length){
return ERROR;
}
int y;
for(y = sl->length;y < i; y--){
sl->numbers[y] = sl->numbers[y-];
}
sl->numbers[i] = number;
++sl->length;
return OK;
}
// 删除算法
int ListDelete_Sq(Sqlist * sl,int i){
if(i < || i >= sl->length){
return ERROR;
}
int y;
for(y = i;y < sl->length; y++){
sl->numbers[y] = sl->numbers[y+];
}
--sl->length;
return OK;
}

2:链式存储结构
  定义:节点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻
  类型:
    单链表:节点只有一个指针域的链表,称为单链表。
    单链表是由头指针唯一确定,因此单链表可以用头指针的名字来命名
    双链表:节点有两个指针域的链表
    循环链表:首尾相接的链表

  单链表算法:

  

#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1 typedef struct Londe{ // 声明节点的类型和指向节点的指针类型
int number; // 节点的数据与
struct Londe *next; // 节点的指针域
}Londe;
typedef Londe *LinkList; // LinkList为指向结构体 Londe 的指针类型
// 初始化单链表
int initList_L(LinkList *L);
// 清除单链表
int ClearList_L(LinkList L);
// 销毁链表
int DestoryList_L(LinkList *L);
// 获取链表长度
int GetLength_L(LinkList L);
// 通过数据域获取链表索引
int GetDataByI_L(LinkList L,int i);
// 删除指定索引
int DeleteIList_L(LinkList *L,int i);
// 在指定索引上插入数据
int InsertList_L(LinkList *L,int i,int number);
// 遍历链表
int ShowKist_L(LinkList L);
int main(void){
// 头指针
LinkList list = NULL;
initList_L(&list); //ClearList_L(list);
//printf("%p",list);
//DestoryList_L(&list);
//printf("%p",list);
//printf("表长:%d",GetLength_L(list));
//printf("第0个的值%d",GetDataByI_L(list,0));
//ShowKist_L(list); InsertList_L(&list,,);
InsertList_L(&list,,);
InsertList_L(&list,,);
DeleteIList_L(&list,);
ShowKist_L(list); }
// 初始化单链表
int initList_L(LinkList *link){
LinkList node = (LinkList)malloc(sizeof(Londe));
if(!node){
return ERROR;
}
node->number = ;
node->next = NULL;
*link = node;
return OK;
}
// 清除单链表
int ClearList_L(LinkList L){
if(!L) {
return ERROR;
}
LinkList per,next;
per = L->next;
while(per){
next = per->next;
free(per);
per = next;
}
L->next = NULL;
return OK;
}
// 销毁单链表
int DestoryList_L(LinkList *L){
LinkList p;
while(*L){
p = *L;
*L = (*L)->next;
free(p);
}
return OK;
}
// 求单链表的表长
int GetLength_L(LinkList L){
int length = ;
while(L){
length++;
L = L->next;
}
return length;
}
// 取第i个元素的值
int GetDataByI_L(LinkList L,int i){
// 判断大小
if(i < || GetLength_L(L) <= i){
return ERROR;
}
int index = ;
while(L){
if(index == i){
return L->number;
}
index++;
L = L->next;
}
return ERROR;
}
// 遍历
int ShowKist_L(LinkList L){
int i = ;
while(L) {
printf("第%d个,值%d \n",i,L->number);
L = L->next;
i++;
}
return ;
}
// 在第i个节点插入新节点
// 如果i是0,则插在最后
// 如果i是 GetLength_L(L),则插在最后面
int InsertList_L(LinkList *L,int i,int number){
if(i < || i > GetLength_L(*L)){
printf("i:%d;length:%d",i,GetLength_L(L));
return ERROR;
}
int index = ;
LinkList prev = NULL;
LinkList next = NULL;
LinkList x = *L;
while(x){
if(index == i-){
prev = x;
}
if(index == i){
next = x;
}
x = x->next;
index++;
}
LinkList node = (LinkList)malloc(sizeof(Londe));
node->number = number;
node->next = NULL;
if(prev){
node->next = prev->next;
prev->next = node; }else{
*L = node;
} return OK;
}
// 删除第i个节点
int DeleteIList_L(LinkList *L,int i) {
if(i < || i > GetLength_L(L)){
return ERROR;
}
int index = ;
LinkList prev = NULL,now = NULL;
LinkList x = *L;
while(x){
// 前一个
if(index == i-){
prev = x;
}
// 当前个
if(index == i){
now = x;
}
index++;
x = x->next;
}
prev->next = now->next;
if(prev) {
prev->next = now->next;
}else{
*L = now->next;
}
free(now);
return OK; }

c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)的更多相关文章

  1. java资料——顺序存储结构和链式存储结构(转)

    顺序存储结构 主要优点 节省存储空间,随机存取表中元素 缺    点 插入和删除操作需要移动元素 在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构. 顺序存储结 ...

  2. C语言实现链表(链式存储结构)

    链表(链式存储结构)及创建 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据.与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其 ...

  3. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  4. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

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

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

  6. C++线性表的链式存储结构

    C++实现线性表的链式存储结构: 为了解决顺序存储不足:用线性表另外一种结构-链式存储.在顺序存储结构(数组描述)中,元素的地址是由数学公式决定的,而在链式储存结构中,元素的地址是随机分布的,每个元素 ...

  7. C++编程练习(2)----“实现简单的线性表的链式存储结构“

    单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 对于查找操作,单链表的时间复杂度为O(n). 对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1). 单链表不需要分配存储 ...

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

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

  9. C#数据结构-二叉树-链式存储结构

    对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...

随机推荐

  1. H5---禁止长按

    以上行为可以总结成这几个(每个手机以及浏览器的表现形式不一样):长按图片保存.长按选择文字.长按链接/手机号/邮箱时呼出菜单. 想要禁止这些浏览器的默认行为,可以使用以下CSS: // 禁止长按图片保 ...

  2. 免费生成二维码接口,可直接嵌入到web项目中,附带嵌入方法,任意颜色二维码,任意大小二维码!

    在线体验连接:http://www.zhaimaojun.top/qrcode/ 你是否在项目中寻找方便而且免费的可以直接嵌入到项目中的二维码生成工具呢?你找到了这里,说明你已经找到了!不要犹豫直接拿 ...

  3. 复习node中加载静态资源--用express+esj

    不做解释,代码一看就懂 app.js import express from 'express' import config from './config' const app = express() ...

  4. tensorflow模型的保存与加载

    模型的保存与加载一般有三种模式:save/load weights(最干净.最轻量级的方式,只保存网络参数,不保存网络状态),save/load entire model(最简单粗暴的方式,把网络所有 ...

  5. JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题

    javascript 点击事件执行两次js问题 在JQuery中存在unbind()方法,先解绑再添加点击事件,解决方案为: $(".m-layout-setting").unbi ...

  6. JAVA8List排序,(升序,倒序)

    List<Integer> integerList = Arrays.asList(4, 5, 2, 3, 7, 9); List<Integer> collect = int ...

  7. 洛谷【P1595 信封问题】 题解

    题目链接 https://www.luogu.org/problem/P1595 题目描述 某人写了n封信和n个信封,如果所有的信都装错了信封.求所有信都装错信封共有多少种不同情况. 输入格式 一个信 ...

  8. kali2019.4试用记录

    问题一:中文乱码 https://blog.csdn.net/dust_hk/article/details/103299136 参考以上博文即可解决: 1.设置locales. dpkg-recon ...

  9. 使用微信扫一扫时获取sign签名

    private $appId = '你的APPID'; private $appSecret = '你的APPsecret'; /** * 获取签名信息 * @return array */ publ ...

  10. Postman: Test

    Tests 参考:Writing Tests Testing examples 这里写测试用例,进行一些判断等等.即处理断言 下面新建了两个测试用例,名字分别是”Status code is 200“ ...