数据结构——单链表
一.预定义常量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
二.单链表结构定义
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
三.单链表基本操作
Status InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if (!L) exit(OVERFLOW);
L->next=NULL;
return OK;
}
Status Inputweicha(LinkList &L)
{
LinkList p;
int i,n;
printf("\nPlease input the sqlist's lengtgh:") ;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("please input %dth elem:",(n-i));
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
Status Inputzhengcha(LinkList &L)
{
int i,n;
LinkList p,q;
L->next=NULL;
q=L;
printf("\nPlease input the sqlist's lengtgh:") ;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("please input %dth elem:",(i+1));
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=NULL;
q->next=p;
q=p;
}
}
void Print_L(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p;
LinkList s;
p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
LinkList p;
LinkList q;
p=L;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
void DestroyList(LinkList &L)
{
LinkList p;
while(L) {
p=L->next;
free(L);
L=p;
}
}
void ClearList(LinkList L)
{
LinkList p;
for(p=L->next;p; p=L->next)
{
L->next=p->next;
free(p);
}
}
Status ListEmpty(LinkList L) {
if( !L->next) return TRUE;
else return FALSE;
}
int ListLength(LinkList L)
{
int n;
LinkList p;
p=L->next;
n=0;
while(p)
{ n++; p=p->next; }
return n;
}
Status GetElem(LinkList L, int i, ElemType &e)
{
int j;
LinkList p;
j=1;
p=L->next;
while(p &&j<i) { p=p->next; ++j;}
if( !p || j>i)
return ERROR;
e=p->data ;
return OK;
}