码迷,mamicode.com
首页 > 编程语言 > 详细

C语言链表完整实现

时间:2016-12-07 20:55:22      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:malloc   bool   ndk   div   plist   返回   blog   kth   插入   

 

 

 

 

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

#define ElementType int
typedef struct Node *List;
typedef struct Node{
	ElementType Data;
	List Next;
};
int Length(List PtrL);
List FindKth(int K,List PtrL);
List Find(ElementType X,List PtrL);
bool Insert(ElementType X,int i, List &PtrL);
List Delete(int i,List &PtrL);
void InitList(List PtrL){
	PtrL= (List)malloc(sizeof(struct Node));
	PtrL->Next=NULL;
}
void printL(List PtrL){
	printf("-------------------------------------------------------------------\n");
	List TmpList = PtrL;
	while(TmpList){
		printf("%d\n",TmpList->Data);
		TmpList = TmpList->Next;
	}
}

int main(){
	List PtrL;
	InitList(PtrL);
	Insert(10,1,PtrL);
	printL(PtrL);
	Insert(20,2,PtrL);
	printL(PtrL);
	for(int i = 1;i<10;i++)
		Insert(i,i,PtrL); 
	printL(PtrL);
	
	
	for(int i = 1;i<5;i++)
		Delete(i,PtrL);
	Delete(5,PtrL);
	printL(PtrL);
	return 0;
}
int Length(List PtrL){
	List TmpPtrL = PtrL;
	int i = 0;
	while(TmpPtrL){
		TmpPtrL = TmpPtrL->Next;
		i++;
	}
	return i;
} 
List  FindKth( int K, List PtrL )
{      List  p = PtrL;
        int  i = 1;
        while (p !=NULL && i < K ) {
               p = p->Next;
               i++;  
        }
       if ( i == K ) return p;  
/* 找到第K个,返回指针 */
       else  return NULL;    
 /* 否则返回空 */
}
List Find(ElementType X,List L){
	List TmpList = L;
	while(TmpList->Data!=X&&TmpList)
		TmpList = TmpList->Next;
	return TmpList;//不管是不是空,就是这一个 
}

bool Insert(ElementType X,int i, List &PtrL){
	//如果插入节点到头部 
	List s,p;
	if(i==1){
		s = (List)malloc(sizeof(struct Node));
		s->Data=X;
		s->Next=PtrL;
		PtrL=s;
		//printf("%d",PtrL->Data);
		return true; 
	} 
	p = FindKth(i-1,PtrL);
	if(p==NULL){
		printf("插入位置不合适\n");
		return false;
	}else{
		s = (List)malloc(sizeof(struct Node));
		s->Data=X;
		s->Next=p->Next;
		p->Next=s;
		return true;
	}
}

List Delete(int i,List &PtrL){
	//如果删除头结点
	List s,p;
	if(i==1){
		s = PtrL;
		PtrL = PtrL->Next;
		free(s);
		return PtrL;
	} 
	p = FindKth(i-1,PtrL);
	if(p==NULL){
		printf("第i-1个节点不存在\n");
		return NULL;
	}else if(p->Next==NULL){
		printf("第i个节点不存在\n");
		return NULL;
	}else{
		s = p->Next;
		p->Next=s->Next;
		free(s);
		return PtrL;
	}
}

  

C语言链表完整实现

标签:malloc   bool   ndk   div   plist   返回   blog   kth   插入   

原文地址:http://www.cnblogs.com/zangkuo/p/6142397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!