您的位置:首页 > 理论基础 > 数据结构算法

c语言数据结构之顺序表静态链表的创建及功能函数

2016-11-03 21:16 309 查看
#include "stdio.h"
#include "stdlib.h"

#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1
#define MAXSIZE 1000

typedef int ElemType ;
typedef int Status ;


/创建一个静态链表/

typedef struct
{
ElemType data;
int cur;

}Component,StaticLinkList[MAXSIZE];


//数组的第一个元素和最后一个元素作为特殊元素处理,不存数据

//未被使用的数组元素称为备用链表,数组的第一个元素(下标为0的元素)存放第一个备用链表的下标。

//而数组最后一个元素的cur则存放第一个有数值元素的下标,相当于单链表的头结点

/初始化一个静态链表***/

Status InitStaticLinkList(StaticLinkList space)
{
int i;
for(i=0;i<MAXSIZE-1;i++)
{
space[i].cur  = i+1;
}
space[MAXSIZE-1].cur  = 0;
return OK ;

}


/若备用空间的链表非空,则返回分配的结点下标给e,否则返回0*****/

Status Malloc(StaticLinkList L,int *e)
{
int i;
i = L[0].cur;//将第一个备用链表的地址赋值给i
if(L[0].cur)
{
L[0].cur = L[i].cur;
}

*e = i;
return OK ;
}


/返回静态链表L的长度[b]*[/b]/

Status LengthList(StaticLinkList L)
{
int j = 0;
int i = L[MAXSIZE - 1].cur ;
while (i)
{
i = L[i].cur;
j++;
}

return j;

}


/在静态链表L中的第i个位置插入元素e****/

Status InsertLinkList(StaticLinkList L,int i,ElemType e)
{
int k,j,ee,ii;
k = MAXSIZE -1;
if(i<1||i>LengthList(L)+1)
{
return ERROR;
}
Malloc(L,&ee);//获取空闲分量的下标
j=ee;

if(j)
{
L[j].data = e;
for(ii=1;ii<=i-1;++ii)//找到第i个元素之前的位置
{
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return ERROR;

}

}


/释放内存函数/

Status Free(StaticLinkList L,int i)
{
L[i].cur = L[0].cur;
L[0].cur = i;
}


/把静态链表L的第i个位置的元素删掉,并返回给e*******/

Status DeleteLinkList(StaticLinkList L,int i,ElemType *e)
{
int k = MAXSIZE -1;
int j;
if(i<1||i>LengthList(L))//待删除元素的下标范围是否正确
{
return ERROR;
}
for(j = 1;j<=i-1;++j)
{
k = L[k].cur;
}
*e = L[i].data ;

j = L[k].cur ;
L[k].cur = L[j].cur;
Free(L,j);

return OK;
}


/主函数/

int main()
{
StaticLinkList L;
int length=0;
ElemType e;
InitStaticLinkList(L);
InsertLinkList(L,1,3);
printf("静态链表的第1个元素的数据域存放的是:%d\n",L[1].data);
length = LengthList(L);
printf("静态链表L内一共有 %d 个元素\n",length );
DeleteLinkList(L,1,&e);
printf("静态链表中的%d被删除\n",e);

system("pause");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐