静态链表的创建

typeDefine.h 头文件

#define MAXSIZE 100

typedef struct {

int data;
int cur;

}component,SLinkList[MAXSIZE];//SLinkList类型为1000长度的数组

//初始化静态链表
void InitSpace_SL(SLinkList S);
//在静态链表中查找元素
int LocateElem_SL(SLinkList S, int e);
//输出静态链表中的所有的元素
void outPutElem_SL(SLinkList S);
//向静态链表中的第i元素插入元素
void InserrElem_SL(SLinkList S,int i);
//在静态链表中插入元素
void DelElem_SL(SLinkList S, int i);

realize.c

#include "stdio.h"
#include "stdlib.h"
#include "typeDefine.h"

//初始化静态链表
void InitSpace_SL(SLinkList S) {

int i = 0;
for (i ;i < 10; i++)
{
S[i].cur = i + 1;//i等于0时为头结点,
S[i].data = i;
}
S[i].data = i;
S[i].cur = 0;//cur为零时为链表的结尾
}

//在静态线性表中查找第一个值为e的元素
int LocateElem_SL(SLinkList S, int e) {
int i = S[0].cur;
while (i&&e!=S[i].data)
{
i = S[i].cur;

}
return i;
}

//输出所有元素
void outPutElem_SL(SLinkList S) {

int i = S[0].cur;

while (i)
{
printf("元素的值为%d\n",S[i].data);
i = S[i].cur;

}

}
//在第i个位置插入元素
void InserrElem_SL(SLinkList S, int i) {
int j = 0;
int k = 0;
while (j<i-1)
{
k=S[k].cur;
j++;
}
S[k].cur = 11;
S[11].cur = k + 1;
S[11].data = 11;
}

//删除第i个位置的元素
void DelElem_SL(SLinkList S,int i) {

int j = 0;
int k = 0;
while (j<i - 1)
{
k = S[k].cur;
j++;
}
//删除元素并没有释放数组的空间(需要释放空间)
S[k].cur = S[S[k].cur].cur;

}

staticLinkList.c

#include "stdio.h"
#include "stdlib.h"
#include "typeDefine.h"

void main() {

SLinkList L;//int L[100]的数组 L为数组的首地址
//初始化静态链表
InitSpace_SL(L);
//在指定位置插入元素
InserrElem_SL(L,2);
//删除指定位置的元素
DelElem_SL(L,2);
//输出链表中所有元素
outPutElem_SL(L);

}

时间: 2024-10-12 17:53:48

静态链表的创建的相关文章

数据结构与算法(三)-线性表之静态链表

前言:前面介绍的线性表的顺序存储结构和链式存储结构中,都有对对象地引用或指向,也就是编程语言中有引用或者指针,那么在没有引用或指针的语言中,该怎么实现这个的数据结构呢? 一.简介 定义:用数组代替指针或引用来描述单链表,即用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法: 上面的静态链表图有两个数组游标和数据,其中数据数组存储数据,而游标数组存储同下标为数据的下一个数据的下标值,简单模拟一下静态链表遍历的过程: 先查看下标为999的游标数组值:1: 根据游标数组值1,查找下标为1的数据:

静态链表实现_详细注释

1 //SLinkList.h 2 3 #ifndef _SLINK_LIST_ 4 #define _SLINK_LIST_ 5 6 template<typename T> 7 class SLinkList 8 { 9 public: 10 SLinkList(int maxz = 100); 11 ~SLinkList(); 12 void CreateList(int n); 13 void Insert(int i, T e); 14 T Delete(int i); 15 T G

静态链表的实现与操作(C语言实现)

我们知道要实现单链表,必须要有指针,那么像Java这样没有指针的的语言就略显蛋疼了. 没关系,我们有静态链表,其本质就是用采用数组的方式实现单链表的功能. 头文件: #ifndef _StaticLinkList_H_ #define _StaticLinkList_H_ typedef void StaticLinkList; typedef void StaticLinkListNode; StaticLinkList * StaticLinkList_Create(int capacity

用数组代替指针实现静态链表

在没有C语言之前还没有指针这个概念,但是那个时候就已经有和现在静态链表操作形式类似数据存储类型.静态链表的优势就在于,在对其中存储的信息进行插入删除操作的时候它的时间复杂度是 O(1) ,那么在没有指针的时候是使用什么来实现这种存储操作的那? 那就是用数组来代替指针,静态链表在进行数据遍历的时候是依靠前一个结点存储的下一个结点的地址来进行遍历.并且可以将所有零散的空间利用起来,这样就更加的节省资源的(数组版本的静态链表在这一点上就做的不好,因为数组需要提前设置好它的大小,所以为了防止存储的数据超

静态链表代码

早期的编程语言不像C语言拥有指针功能,但是又希望能够实现单链表, 于是在数组的基础上创建了单链表,称为静态链表. /************************************* 静态链表 数据结构:每个数组节点都有值和游标. 游标表示下一个节点,节点分为已用节点和备用节点 第一个节点和最后节点保留: 第一个节点游标表示备用节点起始位置 最后一个节点游标表示已用节点的起始位置 已用节点的最后一个元素的游标指向0,表示末尾. ******************************

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

一,线性表顺序存储 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <io.h> #include <math.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSI

【数据结构】单链表&amp;&amp;静态链表详解和代码实例

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存储单元.当有节点插入时,系统动态的为结点分配空间.在结点删除时,应该及时释放相应的存储单元,以防止内存泄露.由于是链式存储,所以操作单链表时,必须知道头结点或者头指针的位置.并且,在查找第i个节点时,必须找到第i-1个节点. 1.2 单链表的存储结构代码描述 对于链式存储,通过上一节的讲解相信大家已

静态链表-C语言实现

1.静态链表是在没有指针的编程语言里对链表的一种实现2.主要是用数组模拟指针3.在这里,使用结构体使数组的每一个空间可以存储一个数据元素(date)和一个游标(cur),游标的作用相当于链表的指针域,用于记录下一元素的下标是多少4.在没有结构体(typedef)的语言中,也可以使用两个并行数组实现此功能 此种结构在编程中不一定能用得到,但是这种思想非常巧妙,非常值得我们学习,不多说,直接上代码,亲测可行,有详细注释 #include<stdio.h> #define MAXSIZE 1000

c语言:建立简单的静态链表,它由3个学生数据的结点组成,要求输出各结点的数据

建立简单的静态链表,它由3个学生数据的结点组成,要求输出各结点的数据. 解:将第1个结点的起始地址赋给头指针head,将第2个结点的起始地址赋给第1个结点的next成员,将第3个结点的起始地址赋给第2个结点的next成员.第3个结点的next成员赋予NULL,这就形成了链表.为了建立链表,使head指向a结点,a.next指向b结点,b.next指向c结点,c.next=NULL的作用是使c.next不指向任何有用的存储单元. 程序: #include<stdio.h> struct Stud