C语言数据结构

静态链表

对于静态链表,可以使用一维数组来进行描述,这种描述方法便于在没有指针的高级设计语言中使用链表结构。

关键字

static list 线性链表 一维数组

定义

用数组描述的链表,即称为静态链表
在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标CUR。

优点

这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时,不需要移动数据元素,只需要修改指针(在这里是修改游标和数组下标),具有链式结构的主要优点

假如有如上的静态链表S中存储着线性表(a,b,c,d,f,g,h,i),Maxsize=11,如图所示,要在第四个元素后插入元素e,方法是:先在当前表尾加入一个元素e,即:S[9].data = e;然后修改第四个元素的游标域,将e插入到链表中,即:S[9].cursor = S4.cursor; S4.cursor = 9;,接着,若要删除第7个元素h,则先顺着游标链通过计数找到第7个元素存储位置6,删除的具体做法是令S[6].cursor = S[7].cursor。

以上来自百度百科

示例代码一

// An highlighted block
#include<stdio.h>
#include"definition.h"
void Init(component *L)//初始化静态链表
{ 
    unsigned short i;
    for(i=0; i<MAXSIZE-1; i++)
        L[i].cur=i+1;
    L[MAXSIZE-1].cur=0;
}
component* Insert(component *L)//插入数据到
链表
{ 
    component *T, *
temp1, *temp2;
    unsigned short i;
    ElemType ch;
    if( i=Malloc(L) ){
        T=temp1=&L;
        T->cur=0;
    } else
        return 0;
     
while( (ch=getchar()) != '\n' ){
        if( i=Malloc(L) ){
            temp2=&L;
            temp2->data=ch;
            temp2->cur=0;
            temp1->cur=i;
             
temp1=temp2;
        } else
            return 0;
    }
    return T;
}

示例代码二

short Malloc(component *L)//分配空间
{ 
    unsigned short i;
    i=L[0].cur;
    if(L[0].cur){
        L[0].cur=L.cur;
        return i;//成功返回空间位置
    }
    return 0;//失败返回0
}
void Free(component *L, short i) //回收空间
{ 
    L.cur=L[0].cur;
    L[0].cur=i;
}
void Disp(component *T, component *L)//显示静态链表数据
{ 
     
while(T->cur){
        T=&L[T->cur];
 
printf("%c", T->data);
} printf("\n");
}
void Purge(component *T, component *L) //删除重复数据
{ component *
tmp, *temp;
for(T=&L[T->cur]; T->data; T=&L[T->cur]){//若T->data中没数据,则退出循环
for(temp=T, tmp=&L[T->cur]; tmp->data;){//若tmp->data中没数据,则退出循环
if(T->data==tmp->data){
temp->cur=tmp->cur;
Free(L, (short)(tmp-L));//回收空间
 
tmp=&L[temp->cur];
} else{
tmp=&L[tmp->cur];
temp=&L[temp->cur];
} }
} }
void Union(component *A, component *B, component *L)//(A-B)交(B-A)
{ component *T, *ta, *tb=B;
short flag;//用于判断是否进行了删除操作
B=&L;
 
while(B->data){//循环判断,直到B表中所有数据都和A表比较过后才结束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值