主题:[原创]小弟写的一些关于链表的基本操作,有问题,请大家帮忙修改一下
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct LNode
{
int data;
struct LNode *next;
}Lnode,LinkList;
typedef int ElemType;
int InitList(LinkList *L)
{
(*L)=(LinkList)malloc(sizeof(struct LNode));
if(!(*L))
exit(OVERFLOW);
else
(*L)->next=NULL;
return OK;
}//InitList
int DestroyList(LinkList *L)
{
LinkList q;
while(*L)
{
q=(*L)->next;
free(*L);
*L=q;
}
return OK;
}//DestroyList
int GetElem(LinkList L,int i,ElemType *e)
{//L为带头结点的单链表的头指针
//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
LinkList p=(L)->next;//初始化,P指向第一个结点
int j=1; //J为计数器
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR; //第i个元素不存在
ElemType e=p->data; //取第i个元素
return OK
}//GetElem
int PriorElem(LinkList L,ElemType cur_e,ElemType *pre_e)
{
LinkList p=L->next;
while(p->next)
{
LinkList q=p->next;
if(q->data=cur_e)
{
*pre_e=p->data;
return OK;
}
p=p->next;
}
}//PriorElem
int ListInsert(LinkList L,int i,ElemType e)
{
LinkList p=L;
LinkList s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>=i-1)
return ERROR;
else
{
s=(LinkList)malloc(sizeof(struct LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
}//ListInsert
int ListDelete(LinkList *L,int i,ElemType *e)
{
LinkList p=*L;
int j=0;
while(p->next&&j<=i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>=i-1)
return ERROR;
else
{
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
}//ListDelete
int ListInsertSorted(LinkList *L,ElemType e)
{
LinkList s;
LinkList p=(*L)->next;
if(p->next&&p->data>=e)
{
s=(LinkList)malloc(sizeof(struct LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
else
return ERROR;
}//ListInsertSorted
int PrintList(LinkList L)
{
if(L!=null);
{
while(L->next)
printf("%d",L->data);
return OK;
}
else
return ERROR;
}//PrintList
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct LNode
{
int data;
struct LNode *next;
}Lnode,LinkList;
typedef int ElemType;
int InitList(LinkList *L)
{
(*L)=(LinkList)malloc(sizeof(struct LNode));
if(!(*L))
exit(OVERFLOW);
else
(*L)->next=NULL;
return OK;
}//InitList
int DestroyList(LinkList *L)
{
LinkList q;
while(*L)
{
q=(*L)->next;
free(*L);
*L=q;
}
return OK;
}//DestroyList
int GetElem(LinkList L,int i,ElemType *e)
{//L为带头结点的单链表的头指针
//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
LinkList p=(L)->next;//初始化,P指向第一个结点
int j=1; //J为计数器
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR; //第i个元素不存在
ElemType e=p->data; //取第i个元素
return OK
}//GetElem
int PriorElem(LinkList L,ElemType cur_e,ElemType *pre_e)
{
LinkList p=L->next;
while(p->next)
{
LinkList q=p->next;
if(q->data=cur_e)
{
*pre_e=p->data;
return OK;
}
p=p->next;
}
}//PriorElem
int ListInsert(LinkList L,int i,ElemType e)
{
LinkList p=L;
LinkList s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>=i-1)
return ERROR;
else
{
s=(LinkList)malloc(sizeof(struct LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
}//ListInsert
int ListDelete(LinkList *L,int i,ElemType *e)
{
LinkList p=*L;
int j=0;
while(p->next&&j<=i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>=i-1)
return ERROR;
else
{
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
}//ListDelete
int ListInsertSorted(LinkList *L,ElemType e)
{
LinkList s;
LinkList p=(*L)->next;
if(p->next&&p->data>=e)
{
s=(LinkList)malloc(sizeof(struct LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
else
return ERROR;
}//ListInsertSorted
int PrintList(LinkList L)
{
if(L!=null);
{
while(L->next)
printf("%d",L->data);
return OK;
}
else
return ERROR;
}//PrintList