假设没有指针,如何利用数组来模拟链表结构。

#include "stdio.h"    #define OK 1
#define ERROR 1
#define TRUE 1
#define FALSE 0#define MASIZE 1000 //存储空间最大分配量typedef int status;
typedef char ElemType;status visit(ElemType c)
{printf("%c", c);return OK;
}// 线性表的存储结构
typedef struct
{ElemType data;int cur;
}Component , StaticLinkList[MASIZE];/* 将一维数组space中各分量链成一个备用链表,space[0].cur为头指针,"0"表示空指针 */status InitList(StaticLinkList space)
{int i;for (i = 0; i < MASIZE - 1; i++){space[i].cur = i + 1;}space[MASIZE - 1].cur = 0;return OK;
}//若备用空间链表非空 则返回分配的节点下标 否则返回0
int Malloc_SSL(StaticLinkList space)
{int i = space[0].cur;if (space[0].cur)space[0].cur = space[i].cur;return i;
}// 将下标为k的空闲节点回收到备用列表
void Free_SSL(StaticLinkList space, int k)
{space[k].cur = space[0].cur; /* 把第一个元素的cur值赋给要删除的分量cur */space[0].cur = k;       /* 把要删除的分量下标赋值给第一个元素的cur */
}// 返回L中数据元素个数
int ListLength(StaticLinkList L)
{int j = 0;int i = L[MASIZE - 1].cur;while (i){i = L[i].cur;j++;}return j;
}/*  在L中第i个元素之前插入新的数据元素e  */
status ListInsert(StaticLinkList L, int i, ElemType e)
{int j;int k;int l;k = MASIZE - 1; /* 注意k首先是最后一个元素的下标 */if (i < 1 || i > ListLength(L) + 1)return ERROR;j = Malloc_SSL(L); /* 获得空闲分量的下标 */if (j){L[j].data = e; /* 将数据赋值给此分量的data */for (int m = 1; m <= (i - 1); m++) /* 找到第i个元素之前的位置 */{k = L[k].cur;}L[j].cur = L[k].cur; /* 把第i个元素之前的cur赋值给新元素的cur */L[k].cur = j; /* 把新元素的下标赋值给第i个元素之前元素的ur */return OK;}return ERROR;
}// 删除在L中第i个数据元素
status ListDelete(StaticLinkList L, int i)
{int j;int k;if ((i < 1) || (i > ListLength(L)))return ERROR;k = MASIZE - 1;for (int j = 1; j <= i - 1; j++){k = L[k].cur;}j = L[k].cur;L[k].cur = L[j].cur;Free_SSL(L, j);return OK;
}//遍历输出
status ListTraverse(StaticLinkList L)
{int j = 0;int i = L[MASIZE - 1].cur;while (i){visit(L[i].data);i = L[i].cur;j++;}return j;printf("\n");return OK;
}int main()
{StaticLinkList L;status i;i = InitList(L);printf("初始化L后: L.length = %d \n", ListLength(L));i = ListInsert(L, 1, 'F');i = ListInsert(L, 1, 'E');i = ListInsert(L, 1, 'D');i = ListInsert(L, 1, 'B');i = ListInsert(L, 1, 'A');printf("\n在L的表头依次插入FEDBA后:\nL.data=");ListTraverse(L);i = ListInsert(L, 3, 'C');printf("\n在L的“B”与“D”之间插入“C”后:\nL.data=");ListTraverse(L);i = ListDelete(L, 1);printf("\n在L的删除“A”后:\nL.data=");ListTraverse(L);printf("\n");return 0;}```

大话数据结构03:静态链表相关推荐

  1. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...

    「今天是学习C语言第 148 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」 # 静态链表 使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系.实现要点: 1.数组 ...

  2. 数据结构:静态链表实现树的同构

    写在最前面 按照课程讲解的思路来写,逻辑关系能够理解清楚了,但是实际运行起来实在是有问题,虽然在PTA上能够通过.但是我自己看不出问题来,并且,看了一遍又一遍仍然看不出来!(可能自己太笨..)这就说明 ...

  3. 数据结构 2-3-4 静态链表

    一.概念 静态链表相当于混合了数组和链表,单独的链表,使用next指针指向内存空间中下一个节点的位置来实现连接的,而数组中是用相对位置来实现,将二者混合,保留指向下一个的指针,但这个指针不是指针,而是 ...

  4. 大话数据结构07 :链表栈

    基础介绍 用链表结构作为栈的支撑结构 代码 #include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #defi ...

  5. Scratch 与C语言实现数据结构静态链表的建立及操作

    Scratch 实现数据结构静态链表的建立及操作 scratch操作 Scratch 实现数据结构静态链表的建立及操作 数据结构 初始化静态链表 添加数据代码 删除数据 回收空闲节点操作代码 计算静态 ...

  6. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表

    [C语言描述]<数据结构和算法> 说是这个教程是按照<大话数据结构>这本书来编写的:数据结构与算法经典书籍--大话数据结构(带配套源码) ↑废话太TM多了,换一个! [搞定数据 ...

  7. 《大话数据结构》5一文学会数据结构中的静态链表存储结构(概念,实例,代码)

    静态链表 1.静态链表基本介绍 (1)静态链表:用数组来代替指针,来描述单链表.我们把用数组描述下标的链表叫做静态链表.也叫游标实现法. (2)首先让数组的元素是两个数据域组成,data 和cur.也 ...

  8. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  9. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

最新文章

  1. python基础知识-11-函数装饰器
  2. 全文搜索技术——Lucene
  3. PMCAFF产品经理第一课 | 「在行」价值1.5万元的强大课程体系,365天能力突围
  4. shanghai road map
  5. IOZONE测试工具使用方法(转载)
  6. linux命令行界面下ctrl 常用组合键速查表
  7. 8266 at 驱动_AT、CVT、DCT 变速器,到底哪个更靠谱
  8. e_msg_c_gs_enter_gs_req
  9. 新型智慧讲台的人工智能
  10. Linux(1)-CentOS7下解决ifconfig command not found
  11. NGINX上PHP header问题
  12. jsp之建立一个九九乘法表
  13. ENVI入门系列教程---一、数据预处理---1.1基本操作--5.x以后的界面(新界面)
  14. java雪花算法实现
  15. 官方免费数据下载全国行政区划具体到村
  16. 非接触IC卡读写模块MFRC530的工作原理及其应用
  17. [codeforces 760B]Frodo and pillows
  18. 【C语言】 《弹跳的小球》游戏编写过程及思路,清屏函数、Sleep()函数的应用
  19. ol3 结构图 仅限ol.source.Source
  20. 多级弹出菜单jQuery插件ZoneMenu

热门文章

  1. C++ vector容器类型 (摘自漫步云端的博客)
  2. 深入delphi编程(转)
  3. DVWA--SQL Injection(非盲注)--四个级别
  4. python如何计算字符宽度_Python中计算字符宽度
  5. React Native开发学习笔记——常用命令
  6. linux提示符目录变为~,Linux终端提示符路径长度的修改方法
  7. python字典计数_Python下封装个好用计数字典包
  8. JQuery中元素的数据存储
  9. CSS 文字显示在图片的中间
  10. Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维