链表中的各种操作(删除, 插入,修改,创建,清空,销毁,查找)

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

//创建一个单链表 
typedef struct student{
	int score;
	struct student *next;
} LinkList;

//链表的创建 
LinkList *creat(){
	int n;
	printf("please input number to list Length\n");
	scanf("%d", &n);
	//定义结构体指针 
	LinkList *head, *node, *end;
	//开辟表头空间 
	head = (LinkList *)malloc(sizeof(LinkList));
	//开辟成功判断 
	if (!head){
		printf("ERROR\n"); 
	} else {
		printf("OK\n");
	}
	end = head;
	printf("please input %d numbers\n", n); 
	for (int i = 0 ; i < n ; i ++){
		node = (LinkList *)malloc(sizeof(LinkList));
		scanf("%d", &node->score);
		end->next = node;
		end = node;
	}
	end->next = NULL;
	printf("创建链表成功\n"); 
	return head;
}

//更改链表中某个位置的值 
void change(LinkList *L){
    int i = 0, n;
    printf("输入你想更改的数字位置\n");
	scanf("%d", &n);
    while(i < n && L != NULL){
    	L = L->next;
    	i ++;
	}
	if (L != NULL){
		printf("输入你要改的数\n"); 
		scanf("%d", &L->score);
	} else {
		printf("ERROR"); 
	}
}

//删除链表中的某一个数 
void deleteOne(LinkList *L){
	LinkList *P;
	int i = 0, n;
	printf("输入你想删除的数字位置\n");
	scanf("%d", &n);
	while (i < n  - 1 && L != NULL){
		L = L->next;
		i ++;
	}
	
	if (L != NULL){
		P = L->next;
		L->next = P->next;
		free(P);
		printf("删除成功\n"); 
	} else {
		printf("ERROR");
	}
}

//链表的插入 
void InsertList(LinkList *L){
	LinkList *p;
	int n, m;
	printf("please input insert location\n");
	scanf("%d", &n);
	printf("please input insert you change number\n");
	scanf("%d", &m);
	//开辟待插入的空间 
	p = (LinkList *)malloc(sizeof(LinkList));
	int i = 0;
	while (i < n - 1 && L != NULL){
		L = L->next;
		i ++;
	}
	p->score = m;
	p->next = L->next;
	L->next = p;
	printf("插入成功\n"); 
}


//查找某元素在链表出现了多少次 
void searchList(LinkList *L){
	int count = 0, n;
	L = L->next;
	printf("please input you search number\n");
	scanf("%d", &n);
	if (L->next == NULL && L->score == n){
		count = 1;
	}

	while(L->next != NULL){
		if (L->score == n){
			count ++;
		}
		L = L->next;
	}
	printf("have %d number is %d\n", count, n);
}

//遍历链表 
void TraverseList(LinkList *L) {
    while (L->next != NULL) {
		L = L->next;
		printf("%d  ", L->score);
	}
	printf("\n");
}

//销毁链表 
void RuinList(LinkList *L){
	LinkList *p;
	while(L->next != NULL){
		p = L->next;
		free(L);
		L = p;
	}
	printf("销毁成功\n"); 
}
//清空链表 
void deletall(LinkList *L){
	LinkList *p, *q;
	p = L->next;
	while(p->next != NULL){
		q = p->next;
		free(p);
		p = q;
	}
	L->next = NULL;
	printf("链表已清空\n"); 
}

int main(){
	int n, m;
	LinkList *L = creat();
	TraverseList(L);
	change(L);
	TraverseList(L);
	deleteOne(L);
	TraverseList(L);
	InsertList(L);
	TraverseList(L);
	deletall(L);
	TraverseList(L);
	InsertList(L);
	TraverseList(L);
	searchList(L);
	RuinList(L);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值