欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构:不带头结点的单链表

程序员文章站 2024-03-21 14:53:04
...

不带头结点的单链表实现

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define null NULL 
typedef int Elemtype;
typedef struct LNode{
	Elemtype data;
	struct LNode* next; 
};

typedef struct LNode Lnode;
typedef struct LNode *LinkList; 
 
bool InitList(LinkList L){
	L=null;
	return true;
} 

bool Empty(LinkList L){
	return (L==null);
}

int CreateFromHead(LinkList L){
	node *s,*r;
	int flag=1;
	Elemtype ch;
	while(flag){
		ch=scanf("%d",&ch);
		if(ch!=9999){
			s=(node*)malloc(sizeof(node));
			if(s==null){
				return ERROR;
			} 
			r=L;
			L=s; 
			s->next=r;
		}
		else{
			break;
		}
	}
	return OK;
} 

int CreateFromTail(LinkList L){
	node *r,*s;
	int flag;
	int number=1;
	Elemtype ch;
	while(flag){
		ch=scanf("%d",&ch);
		if(ch!=9999){
			s=(node*)malloc(sizeof(node));
			if(s==null){
				return ERROR;
			}
			if(number==1){
				L=s;
				r=L;
			}
			r->next=s;
			s->next=null;
			r=s;
		}
		else{
			r->next=null;
			break;
		}
	}
}

int GetElem(LinkList L,int i){
	node *p;
	int j=1;
	if(i<1){
		return ERROR;
	}
	p=L;
	while(L&&j<i){
		p=p->next;
		j++;
	}
	if(L==null){
		return ERROR;
	}
	return OK;
}

int LocaElem(LinkList L,Elemtype e){
	node *p;
	p=L;
	while(p&&(p->data!=e)){
		p=p->next;
	}
	if(p==null){
		return ERROR;
	}
	return OK;
}

int InsertElem(LinkList L,int i,Elemtype e){
	node *pre,r;
	int j=1;
	if(i<1){
		return ERROR;
	}	
	pre=L;
	while(pre&&j<i-1){
		pre=pre->next;
		j++;
	}
	if(pre==null){
		return ERROR;
	}
	r=(Lnode*)malloc(sizeof(Lnode));
	r->next=pre->next;
	pre->next=r;
	r->data=e;
	return OK;
}

int DelElem(LinkList L,int i){
	node *pre=L;
	int j=0;
	while(pre!=null&&j<i-1){
		pre=pre->next;
		j++;
	}
	if(pre==null){
		return ERROR;
	}
	if(pre->next==null){
		return ERROR;
	}
	node *Tem;
	Tem=pre->next;
	pre->next=Tem->next;
	free(Tem);
	return OK;
}

//链表逆序 参考头插法建表,注意此时移动的是L,L不断向前移动 
 
//main()
int main(int argc, char *argv[])
{
	LinkList L;// 
	 
	return 0;
}