数据结构 线性表的链式表示和实现的基本操作 可运行.doc
文本预览下载声明
//头文件Head.h
#include stdlib.h//exit
#define OVERFLOW -2
#define NULL 0
#define TRUE 1
#define ERROR 0
#define OK 1
#define INFEASIBLE -1
typedef int Status;
typedef int ElemType;
typedef struct LNode //结点类型
{
ElemType data;
struct LNode *prior;
struct LNode *next;
} LNode,*LinkList;
Status comp(ElemType c1,ElemType c2) //判定函数(平方关系)
{
if(c1==c2*c2)
return TRUE;
else
return ERROR;
}
void visit(ElemType c) //被调用的函数
{
printf(%d ,c);
}
Status InitList(LinkList L)
{//初始化
// LinkList L;
L=(LinkList)malloc(sizeof(LNode));//生成结点
L-next=NULL;
return OK;
}
Status DestroyList(LinkList L)
{//摧毁
while(L-next)
{L=L-next;
free(L);
}
return OK;
}
Status ClearList(LinkList L)
{//清空
L-next=NULL;
return OK;
}
Status ListEmpty(LinkList L)
{//判空
if(L-next==NULL)
return TRUE;
return ERROR;
}
Status ListLength(LinkList L)
{//长度
LinkList p;
p=L-next;
int j=0;
while(p)
{
j++;
p=p-next;
}
return j;
}
Status GetElem(LinkList L,int i,ElemType e)
{//取值
LinkList p;
p=L-next;
int j=1;
while(pji)
{
p=p-next;
j++;
}
if(!p||ji)
return ERROR;
return OK;
}
int LocateElem(LinkList L,ElemType e,Status(*compare)(ElemType,ElemType))
{//返回L中第1个与e满足关系compare()的数据元素的位序
LinkList p;
int i=0;
//while(i=ListLength(L)!compare(p-data,e))
while(p!compare(p-data,e))
{
p=p-next;
i++;
}
if(p)//////
return i;
return ERROR;
}
Status PriorElem(LinkList L,ElemType cur_e,ElemType pre_e)
{//返回前驱
LinkList p;
int i=2;
p=L-next;
while(pp-data!=cur_e)
{
i++;
p=p-next;
}
if(!p)
return INFEASIBLE;
else
{
pre_e=p-prior-data;
return pre_e;
}
}
Status NextElem(LinkList L,ElemType cur_e,ElemType next_e)
{//返回后继
LinkList p;
p=L;
int i=1;
while(p-nextp-data!=cur_e)
{
i++;
p=p-next;
}
if(p==NULL)
return INFEASIBLE;
else
{
next_e=p-next-data;
return next_e;
}
}
Status ListInsert(LinkList L,ElemType i,ElemType e)
{//插入
LinkList p,s;
p=L;
int j=0;
while(pji-1)
{
p=p-next;
++j;
}
显示全部