• 单链表操作(带头节点)


    //带头节点的单链表 
    #include <stdio.h>
    #include <malloc.h>
    
    typedef struct LNode{		//定义单链表 
    	int data;
    	struct LNode *next;
    }Node , *LinkList; 
    
    bool InitList(LinkList &);	//初始化单链表 
    bool ListInsert(LinkList & , int , int);	//在指定位置插入数据 
    bool Empty(LinkList); 	//判断链表是否为空  
    bool HListInsert(LinkList & , int , int);	//在指定节点前面插入数据  
    bool RListInsert(LinkList * , int , int);	//在指定节点后面插入数据  
    void output(LinkList);	//输出链表 
    bool ListDelete(LinkList & , int , int &);	//删除指定位置的数据 
    bool HeadInsert(LinkList , int);	//头插法 
    Node* GetElem(LinkList , int);		//查找指定位置的值 
    int LocateElem(LinkList , int);		//查找指定的值在哪个位置 
    
    int main(void){
    	LinkList L;
    	InitList(L);
    	
    	HeadInsert(L,5);
    	HeadInsert(L,2);
    	TailInsert(L,7);
    	TailInsert(L,4);
    	RListInsert(&L,2,3);
    	
    	printf("当前单链表中的数据是:");
    	output(L);
    	
    	printf("
    ");
    	Node* r = GetElem(L,3);
    	printf("你要查找的值是%d",r->data);
    	
    	printf("
    ");
    	int x = LocateElem(L,7);
    	printf("你要查找的值在第%d位",x);
    	
    	printf("
    ");
    	int e = -1;
    	ListDelete(L,2,e);
    	printf("删除的哪个元素是:%d",e);
    	
    	printf("
    ");
    	printf("当前单链表中的数据是:");
    	output(L);
    	
    	printf("
    ");
    	if(Empty(L)){
    		printf("当前链表为空!");
    	}else{
    		printf("当前链表不为空! ");
    	} 
    	return 0;
    } 
    
    //初始化单链表 
    bool InitList(LinkList &L){
    	L = (Node*)malloc(sizeof(Node));
    	if(L == NULL){
    		return false;
    	}
    	L->next = NULL;
    	return true;
    } 
    
    //遍历单链表
    void output(LinkList L){
    	Node *p = L->next;
    	while(p != NULL){
    		printf("%d ",p->data);
    		p = p->next;
    	}
    } 
    
    //判断单链表是否为空
    bool Empty(LinkList L){
    	if(L->next == NULL){
    		return true;
    	}else{
    		return false;
    	}
    } 
    
    //在指定的位置插入数据 
    bool ListInsert(LinkList &L ,int i , int e){
    	if(i < 1){
    		return false;
    	}
    	Node *p = L;
    	int j = 0;
    	while(p != NULL && j < i-1){
    		p = p->next;
    		j ++;
    	}
    	if(p == NULL){
    		return false;
    	}
    	Node *s = (Node*)malloc(sizeof(Node));
    	s->data = e;
    	s->next = p->next;
    	p->next = s;
    	return true;
    } 
    
    //在指定节点前面插入数据 
    bool HListInsert(LinkList &L , int i , int e){
    	if(i < 1){
    		return false;
    	}
    	Node *p = L;
    	int j = 0;
    	while(p != NULL && j < i){
    		p = p->next;
    		j ++; 
    	}
    	if(p == NULL){
    		return false;
    	}
    	Node *s = (Node *)malloc(sizeof(Node));
    	s->data = p->data;
    	p->data = e;
    	s->next = p->next;
    	p->next = s; 
    	return true;
    } 
    
    //在指定节点后面插入数据 
    bool RListInsert(LinkList *L , int i , int e){
    	if(i < 1){
    		return false;
    	}
    	Node *p = *L;
    	int j = 0;
    	while(p != NULL && j < i){
    		p = p->next;
    		j ++;
    	}
    	if(p == NULL){
    		return false;
    	}
    	Node *s = (Node *)malloc(sizeof(Node));
    	s->next = p->next;
    	p->next = s;
    	s->data = e; 
    }
    
    //删除指定位置的数据 
    bool ListDelete(LinkList &L , int i , int &e){
    	if(i < 1){
    		return false;
    	}
    	Node *p = L;
    	int j = 0;
    	while(p != NULL && j < i-1){
    		p = p->next;
    		j ++;
    	}
    	if(p == NULL || p->next == NULL){
    		return false;
    	}
    	Node *q = p->next;
    	e = q->data;
    	p->next = q->next;
    	free(q);
    	return true;
    } 
    
    //头插法
    bool HeadInsert(LinkList L , int e){
    	Node *s = (Node *)malloc(sizeof(Node));
    	//L->next = NULL;	//使用头插法建立单链表时需要初始化next 
    	s->data = e;
    	s->next = L->next;
    	L->next = s;
    	return true;
    }
    
    //查找指定位置的值 
    Node* GetElem(LinkList L , int i){
    	if(i < 1){
    		return NULL;
    	}
    	Node *p = L;
    	int j = 0;
    	while(p != NULL && j < i){
    		p = p->next;
    		j ++;
    	}
    	return p;
    }
    
    //查找指定的值在哪个位置 
    int LocateElem(LinkList L , int e){
    	Node *p = L->next;
    	int j = 1;
    	while(p != NULL && p->data != e){
    		p = p->next;
    		j ++;
    	}
    	if(p == NULL){
    		return -1;
    	}else{
    		return j; 
    	}
    }
    
  • 相关阅读:
    PHP开发学习门户改版效果图投票
    怎样用js得到当前页面的url信息方法(JS获取当前网址信息)
    java 获取当期时间之前几小时的时间
    超人学院Hadoop大数据技术资源分享
    plsql导入一个目录下全部excel
    UML简单介绍
    Mod in math
    父母之爱子,则为之计深远是什么意思?_百度知道
    2014创客118新年大爬梯_活动行-国内最好的活动报名及售票平台!
    北京创客空间 BEIJING MAXPACE的小站
  • 原文地址:https://www.cnblogs.com/Timesi/p/12425972.html
Copyright © 2020-2023  润新知