“a.h”
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType data;
int cur;
}component,SLinkList[MAXSIZE];
"b.h"
#include"a.h"
int ListMalloc(SLinkList L)
{
int i;
i=L[0].cur;
if(L[0].cur)
L[0].cur=L[i].cur;
return i;
}
void ListFree(SLinkList L,int k)
{
L[k].cur=L[0].cur;
L[0].cur=k;
}
Status InitList(SLinkList L)
{
int i=0; //一开始的大意,没有将i赋值,找bug老半天。
L[MAXSIZE-1].cur=0;//由于无指针,所以不用->
for(i;i
L[i].cur=i+1;
}
return OK;
}
Status ClearList(SLinkList L)
{
int i=L[MAXSIZE-1].cur;
int j,k;
L[MAXSIZE-1].cur=0;
k=L[0].cur;
L[0].cur=i;
while(i){
j=i;
i=L[i].cur;
}
L[j].cur=k;
return OK;
}
Status ListEmpty(SLinkList L)
{
if(L[MAXSIZE-1].cur==0)
return TRUE;
else
return FALSE;
}
Status ListLength(SLinkList L)
{
int j=0,i=L[MAXSIZE-1].cur;
while(i){
i=L[i].cur;
j++;
}
return j;
}
Status GetElem(SLinkList L,int i,ElemType *e)
{
int k=L[MAXSIZE].cur;
int j=1;
if(i>ListLength(L)||i<1)
return ERROR;
for(j;j
k=L[k].cur;
*e=L[k].data;
return OK;
}
int LocateElem(SLinkList L,ElemType e)
{
int i=MAXSIZE-1;
while(i&&L[i].data!=e)
i=L[i].cur;
if(i)
return i;
else
return ERROR;
}
Status PriorElem(SLinkList L,ElemType cur_e,ElemType *pre_e)
{
int i=L[MAXSIZE-1].cur;
int j;
while(i&&L[i].data!=cur_e){
j=i;
i=L[i].cur;
}
if(i){
*pre_e=L[j].data;
return OK;
}
else
return ERROR;
}
Status NextElem(SLinkList L,ElemType cur_e,ElemType *next_e)
{
int i=L[MAXSIZE-1].cur;
while(i&&L[i].data!=cur_e)
i=L[i].cur;
if(i){
*next_e=L[L[i].cur].data;
return OK;
}
else
return ERROR;
}
Status ListInsert(SLinkList L,int i,ElemType e)
{
int l;
int j=MAXSIZE-1;
int k;
if(i<1||i>ListLength(L)+1)
return ERROR;
k=ListMalloc(L);
if(k){
for(l=1;l
j=L[j].cur;
L[k].cur=L[j].cur;
L[j].cur=k;
L[k].data=e;
return OK;
}
return ERROR;
}
Status ListDelete(SLinkList L,int i,ElemType *e)
{
int j=MAXSIZE-1;
int k;
if(i<1||i>ListLength(L))
return ERROR;
while(--i)
j=L[j].cur;
k=L[j].cur;
*e=L[k].data;
L[j].cur=L[k].cur;
ListFree(L,k);
return OK;
}
Status ListTraverse(SLinkList L,void(*fun)(ElemType e))
{
int i=L[MAXSIZE-1].cur;
while(i){
fun(L[i].data);
i=L[i].cur;
}
return OK;
}
"main.c"
#include"b.c"
void fun(ElemType e)
{
printf(" %d ",e);
}
int main()
{
int i;
ElemType e;
SLinkList L;
InitList(L);
printf("init ok");
for(i=0;i<10;i++)
ListInsert(L,1,i);
ListTraverse(L,fun);
printf("\n");
printf("静态链表的长度为:%d\n",ListLength(L));
if(ListEmpty(L))
printf("表为空!!\n");
else
printf("表不为空\n");
printf("表中4的位序不是位置为 %d\n" ,LocateElem(L,4));
GetElem(L,3,&e);
printf("表中第3个元素是 %d\n", e);
PriorElem(L,5,&e);
printf("5之前的一个元素是 %d\n", e);
NextElem(L,5,&e);
printf("5之后的一个元素是 %d\n",e);
ListDelete(L,7,&e);
printf("删除的第7个元素是 %d\n",e);
ListTraverse(L,fun);
ClearList(L);
ListTraverse(L,fun);
if(ListEmpty(L))
printf("表为空!!\n");
else
printf("表不为空\n");
return OK;
}
为了辨明数组哪些变量没被使用,将所有没使用的分量用游标链成一个备用链表
![静态链表 静态链表](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)