C语言学习笔记—链表

#include "list.h"

/*
typedef struct _node{
	int value;
	struct _node *next;
}Node;

typedef struct _node{
	Node *head;
}List;

*/

//添加节点 
void add(List *plist,int number){
	//add to linked_list
	Node *p=(Node*)malloc(sizeof(Node));//*p指针用于暂存,创建的一个链表节点的结构体的指针 
	p->value=number;//往结构体中赋值 
	p->next=NULL;//结构体中赋上下一个节点的地址,一开始先按 NULL处理 
	//find the last
	Node *last=plist->head;//第一步先创建一个指向链表尾的指针。把链表头和尾指向一起   
	if(last==NULL){
	plist->head=p;//第二部把头指向创建的第一个节点 
	}
	else{
	//attch
	last->next=p;//第三步指向最新创建的节点 
		while(last->next){
			last=last->next;
		}		
	}
}

//输出所有节点 
void outvalue(List *list){
	Node *p;
	//遍历一个链表的经典写法 
	for(p=list->head;p;p=p->next){
		printf("%d\n",p->value);
	}
}

//找出节点中与输入值匹配的节点,并输出其值 
void list_getnode(List *list){
	int number;
	scanf("%d",&number);
	Node *p;
	int isfound=0;
	for(p=list->head;p;p=p->next){
		if(p->value==number){
			printf("%d\n",p->value);
			isfound=1;
			break;
		}
	}
	if(!isfound){
		printf("没找到\n");
	}
}

//删除与输入值相等的节点 
void delect_node(List *list){
	int number;
	scanf("%d",&number);	
	Node *p;
	Node *q;
	q=NULL;
	//所有在 ->左边的指针都必须保证其安全 
	for(p=list->head;p;p=p->next){
		if(p->value==number){
			if(q){
				q->next=p->next;
			}else{
				list->head=p->next;
			}
			free(p);
			break;
		}
	}	
}

//删除所有节点 
void delect_allnode(List *list){
	
	Node *p;
	Node *q;
	//清楚整个链表
	for(p=list->head;p;p=q){
		q=p->next;
		free(p);
	} 
}

void list1(void){
	List list;
	list.head=0;//结构体,包含一个指向链表头节点的结构体的指针 
	int number;
	do{
		scanf("%d",&number);
		if(number!=-1){
			add(&list,number);
		}
	}
	while(number!=-1);
	
	outvalue(&list);
	list_getnode(&list);
	delect_node(&list);
	delect_allnode(&list);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry_no_name

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值