带头结点单链表基本操作参考代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*线性表抽象数据类型的带头结点单链表实现*/ #include

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define OVERFLOW -2

#define MAXSIZE 100

#define NULL 0

typedef int status;

typedef int elemtype;

typedef struct lnode{

elemtype data;

struct lnode *next;

}lnode,*linklist;

/*初始化*/

status initlist(linklist *l){

*l=(linklist)malloc(sizeof(lnode));

if(*l) {(*l)->next=NULL;

return OK;

}

else return OVERFLOW;

}

/*销毁*/

status destroylist(linklist *l){

linklist p;

while(*l){

p=*l;

*l=(*l)->next;

free(p);

}

return OK;

}

/*置空*/

status clearlist(linklist *l){

linklist p,q;

p=(*l)->next;

(*l)->next=NULL;

while(p){

q=p;

p=p->next;

free(q);

}

return OK;

}

/*求单链表长度*/

int listlength(linklist l){

linklist p;

int i=0;

p=l->next;

while(p){

i++;

p=p->next;

}

return i;

}

/*单链表空否*/

status listempty(linklist l){

if(l->next) return FALSE;

else return TRUE;

}

/*查找*/

int locateelem(linklist l,elemtype e){

int i=0;

linklist p;

p=l->next;

while(p){

i++;

if (p->data==e) return i;

p=p->next;

}

return 0;

}

/*读第i个元素*/

status getelem(linklist l,int i,elemtype *e){

int j=1;

linklist p;

p=l->next;

while(p&&(j

j++;

p=p->next;

}

if (!p|| (j>i)) return ERROR;

*e=p->data;

return OK;

}

/*求前驱元素*/

status priorelem(linklist l,elemtype cur_e,elemtype *pre_e){

linklist p,q;

if(l->next&&(l->next->data==cur_e)) return ERROR;

q=l->next;

p=q->next;

while(p&&(p->data!=cur_e)){

q=p;

p=p->next;

}

if(!p) return ERROR;

*pre_e=q->data;

return OK;

}

/*求后继元素*/

status nextelem(linklist l,elemtype cur_e,elemtype *next_e){ linklist p;

p=l->next;

while(p&&(p->data!=cur_e))

p=p->next;

if(!p) return ERROR;

*next_e=p->next->data;

return OK;

}

/*在第i个位置插入元素e*/

status listinsert(linklist *l,int i,elemtype e){

int j=0;

linklist p,s;

p=*l;

while(p &&j

j++;

p=p->next;

}

if(!p||(j>i-1)) return ERROR;

s= (linklist) malloc (sizeof(lnode));

s->data=e;

s->next=p->next;

p->next=s;

return OK;

}

/*删除第i个元素*/

status listdelete(linklist *l, int i, elemtype *e) {

linklist p,q;

int j;

p=*l;

j=0;

相关文档
最新文档