#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);
}
链表中的各种操作(删除, 插入,修改,创建,清空,销毁,查找)
最新推荐文章于 2024-07-15 19:05:33 发布