单链表创建、查找(C语言)

#include
#include
typedef int ElemType;

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

//采用头插法建立单链表
LinkList CreatList1(LinkList &L){
	//从表尾到表头逆向建立单链表L,每次均在头结点之后插入元素
	LNode *s;int x;
	L=(LinkList)malloc(sizeof(LNode));	//创建头结点
	L->next=NULL;	//初始为空链表
	scanf("%d",&x);	//输入结点的值
	while(x!=9999){	//输入9999表示结束
		s=(LNode*)malloc(sizeof(LNode));	//创建新结点
		s->data=x;
		s->next=L->next;
		L->next=s;	//将新结点插入表中,L为头指针
		scanf("%d",&x); 
	} 		//while结束
	return L; 
} 

//采用尾插法建立单链表
 LinkList CreatList2(LinkList &L){
 	//从表头到表尾正向建立单链表L。每次均在表尾插入元素
	 int x;		//设元素类型为整型
	 L=(LinkList)malloc(sizeof(LNode));
	 LNode *s,*r=L;	//r为表尾指针
	 scanf("%d",&x);//输入结点的值
	 while(x!=9999){//输入9999表示结束 
	 	s=(LNode*)malloc(sizeof(LNode)); 
	 	s->data=x;
		r->next=s;
		r=s;	//r指向新的表尾结点
		scanf("%d",&x); 
	 } 
	 r->next=NULL;
	 return L;
 } 
 
 //按序号查找结点值
 LNode *GetElem(LinkList L,int i){
 	//本算法取出单链表L(带头结点)中第i个位置的结点指针
	 int j=1;	//计数,初始值为1
	 LNode *p=L->next;	//头结点指针赋值给p
	 if(i==0)
	 	return L;	//若i等于0,则返回头结点
	 if(i<1)
	 	return NULL;	//若i无效,则返回NULL
	 while(p&&jnext;
	 	j++;
	 } 
	 return p;	//返回第i个结点的指针,如果i大于表长,p=NULL,直接返回p即可 
 } 
 
 //按值查找表结点
 LNode *LocateElem(LinkList L,ElemType e){
 	//本算法查找单链表L(带头结点)中数据域值等于e的结点指针,否则返回NULL
	 LNode *p=L->next;
	 while(p!=NULL&&p->data!=e)	//从第1个结点开始查找data 
	 	p=p->next; 
	 return p;	//找到后返回该结点指针,否则返回NULL 
 } 
 
 

 

你可能感兴趣的:(数据结构)