循环单链表的简单实现
#include <stdio.h>
#include <stdlib.h>
#define null NULL
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
} node,*LinkList;
bool InitList(LinkList *L){
(*L)=(node*)malloc(sizeof(node));
if((*L)==null){
return false;
}
(*L)->next=(*L);
(*L)->data=null;
return true;
}
bool IsEmpty(LinkList L){
if(L==null){
return true;
}else{
return false;
}
}
bool IsTailNode(LinkList L,node *p){
if(p->next=L){
return true;
}
else{
return false;
}
}
bool InsertNextnode(node *p,node *s){
if(p==null||s==null){
return false;
}
s->next=p->next;
p->next=s;
return true;
}
node* Inputnode(Elemtype e){
node *tem;
tem=(node*)malloc(sizeof(node));
tem->data=e;
tem->next=null;
return tem;
}
bool CreateFromHead(LinkList L){
if(L==null){
return false;
}
int flag=1;
Elemtype ch;
while(flag){
scanf("%d",&ch);
if(ch!=9999){
node *tem;
tem=Inputnode(ch);
InsertNextnode(L,tem);
}
else{
flag=0;
}
}
return true;
}
node* GetElem(LinkList L,int index){
if(L==null){
return false;
}
if(index<1){
return false;
}
node *tem=L->next;
int i=1;
while(tem->next!=L&&i<index){
tem=tem->next;
i++;
}
if(i==index){
return tem;
}
else{
return null;
}
}
node* LocalElem(LinkList L,Elemtype e){
node *tem=L->next;
int i=1;
while(tem->next!=L&&tem->data!=e){
tem=tem->next;
i++;
}
if(tem->data==e){
return tem;
}else{
return null;
}
}
bool DelList(LinkList L,int index,Elemtype *e){
node *tem;
if(index<1){
return false;;
}
tem=GetElem(L,index-1);
if(tem==null){
return false;
}
if(tem->next==L){
return false;
}
node *p;
p=tem->next;
tem->next=p->next;
return true;
}
bool PrintList(LinkList L){
node *tem;
while(tem->next!=L){
tem=tem->next;
printf("%d ",tem->data);
}
printf("\n");
return true;
}
int main(int argc, char *argv[])
{
return 0;
}