大话数据结构03:静态链表
假设没有指针,如何利用数组来模拟链表结构。
#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:静态链表相关推荐
- c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
「今天是学习C语言第 148 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」 # 静态链表 使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系.实现要点: 1.数组 ...
- 数据结构:静态链表实现树的同构
写在最前面 按照课程讲解的思路来写,逻辑关系能够理解清楚了,但是实际运行起来实在是有问题,虽然在PTA上能够通过.但是我自己看不出问题来,并且,看了一遍又一遍仍然看不出来!(可能自己太笨..)这就说明 ...
- 数据结构 2-3-4 静态链表
一.概念 静态链表相当于混合了数组和链表,单独的链表,使用next指针指向内存空间中下一个节点的位置来实现连接的,而数组中是用相对位置来实现,将二者混合,保留指向下一个的指针,但这个指针不是指针,而是 ...
- 大话数据结构07 :链表栈
基础介绍 用链表结构作为栈的支撑结构 代码 #include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #defi ...
- Scratch 与C语言实现数据结构静态链表的建立及操作
Scratch 实现数据结构静态链表的建立及操作 scratch操作 Scratch 实现数据结构静态链表的建立及操作 数据结构 初始化静态链表 添加数据代码 删除数据 回收空闲节点操作代码 计算静态 ...
- C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表
[C语言描述]<数据结构和算法> 说是这个教程是按照<大话数据结构>这本书来编写的:数据结构与算法经典书籍--大话数据结构(带配套源码) ↑废话太TM多了,换一个! [搞定数据 ...
- 《大话数据结构》5一文学会数据结构中的静态链表存储结构(概念,实例,代码)
静态链表 1.静态链表基本介绍 (1)静态链表:用数组来代替指针,来描述单链表.我们把用数组描述下标的链表叫做静态链表.也叫游标实现法. (2)首先让数组的元素是两个数据域组成,data 和cur.也 ...
- c语言 静态链表插入排序,数据结构C语言版 表插入排序
西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
最新文章
- python基础知识-11-函数装饰器
- 全文搜索技术——Lucene
- PMCAFF产品经理第一课 | 「在行」价值1.5万元的强大课程体系,365天能力突围
- shanghai road map
- IOZONE测试工具使用方法(转载)
- linux命令行界面下ctrl 常用组合键速查表
- 8266 at 驱动_AT、CVT、DCT 变速器,到底哪个更靠谱
- e_msg_c_gs_enter_gs_req
- 新型智慧讲台的人工智能
- Linux(1)-CentOS7下解决ifconfig command not found
- NGINX上PHP header问题
- jsp之建立一个九九乘法表
- ENVI入门系列教程---一、数据预处理---1.1基本操作--5.x以后的界面(新界面)
- java雪花算法实现
- 官方免费数据下载全国行政区划具体到村
- 非接触IC卡读写模块MFRC530的工作原理及其应用
- [codeforces 760B]Frodo and pillows
- 【C语言】 《弹跳的小球》游戏编写过程及思路,清屏函数、Sleep()函数的应用
- ol3 结构图 仅限ol.source.Source
- 多级弹出菜单jQuery插件ZoneMenu
热门文章
- C++ vector容器类型 (摘自漫步云端的博客)
- 深入delphi编程(转)
- DVWA--SQL Injection(非盲注)--四个级别
- python如何计算字符宽度_Python中计算字符宽度
- React Native开发学习笔记——常用命令
- linux提示符目录变为~,Linux终端提示符路径长度的修改方法
- python字典计数_Python下封装个好用计数字典包
- JQuery中元素的数据存储
- CSS 文字显示在图片的中间
- Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维