节点定义
typedef struct Link
{
int elem;
struct Link *next;
}link;
主函数调用逻辑
int main(){
link *p = creatLink();
//创建链表返回指针p,作为链表的头指针
insertLink(p);
delLink(p);
updateLink(p);
selectLink(p);
printLink(p);
}
创建链表creatLink()
link *creatLink(){
link *head, *node, *end;
head = (link*)malloc(sizeof(link));
end = head;
for(int i=0; i<N; i++){
node = (link*)malloc(sizeof(link));
node->elem = createSrand(N, 50);
end->next = node;
end = node;
}
end->next = NULL;
return head;
}
插入链表insertLink()
link *insertLink(link *list){
link *temp = list;
//判断数据合法性
printf("enter postion you want to insert\n");
int n;
scanf("%d",&n);
for(int i=0; i<n; i++){
if(temp == NULL){
printf("postion error!!\n");
}
temp = temp->next;
}
link *insert = (link*)malloc(sizeof(link));
printf("enter insert value\n");
scanf("%d",&insert->elem);
insert->next = temp->next;
temp->next = insert;
}
删除链表delLink()
link *delLink(link *list){
link *temp = list;
printf("enter postion you want to delete\n");
int n;
scanf("%d",&n);
for(int i=0; i<n-1; i++){
//被删除的前一个node
temp = temp->next;
}
link *del = temp->next;
temp->next = temp->next->next;
free(del);
}
创建、插入、删除动画演示
完整代码linkList.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
typedef struct Link
{
int elem;
struct Link *next;
}link;
int createSrand(int count, int range){
return rand() % range;
}
void printLink(link *list){
link *temp = list;
printf("\nlink-table is\n");
while (temp->next != NULL)
{
temp = temp->next;
printf("%d ",temp->elem);
}
printf("\n");
}
int getLength(link *list){
int length = 0;
while (list -> next != NULL){
length++;
}
return length;
}
link *creatLink(){
link *head, *node, *end;
head = (link*)malloc(sizeof(link));
end = head;
for(int i=0; i<N; i++){
node = (link*)malloc(sizeof(link));
node->elem = createSrand(N, 50);
end->next = node;
end = node;
}
end->next = NULL;
return head;
}
link *insertLink(link *list){
link *temp = list;
//判断数据合法性
printf("enter postion you want to insert\n");
int n;
scanf("%d",&n);
for(int i=0; i<n; i++){
if(temp == NULL){
printf("postion error!!\n");
}
temp = temp->next;
}
link *insert = (link*)malloc(sizeof(link));
printf("enter insert value\n");
scanf("%d",&insert->elem);
insert->next = temp->next;
temp->next = insert;
}
link *delLink(link *list){
link *temp = list;
printf("enter postion you want to delete\n");
int n;
scanf("%d",&n);
for(int i=0; i<n-1; i++){
//被删除的前一个node
temp = temp->next;
}
link *del = temp->next;
temp->next = temp->next->next;
free(del);
}
link *updateLink(link *list){
link *temp = list;
printf("enter postion you want to update\n");
int n;
scanf("%d",&n);
for(int i=0; i<n; i++){
temp = temp->next;
}
printf("insert update value\n");
scanf("%d",&temp->elem);
}
link *selectLink(link *list){
link *temp = list;
printf("enter value you want to find\n");
int value;
scanf("%d",&value);
for(int i=0; temp -> next != NULL; i++){
temp = temp -> next;
if (temp->elem == value)
{
printf("%d in %d,address is 0x%x\n",value,i,temp);
}
}
}
int main(){
link *p = creatLink();
printf("random link-table is\n");
printLink(p);
printf("select your option\n");
printf("1. insert value\n2. delete value\n3. change value\n4. query value\n");
int menu;
scanf("%d",&menu);
switch (menu)
{
case 1:
insertLink(p);
printLink(p);
break;
case 2:
delLink(p);
printLink(p);
break;
case 3:
updateLink(p);
printLink(p);
break;
case 4:
selectLink(p);
break;
default:
break;
}
}
OωO 网站做得好好看!!!
Bertha 2022-04-10 23:14
好耶是链表!
其实习惯上我喜欢用另外一个结构体来存链表
```c
typedef struct _LinkList{
link* linkList;
link* head;
link* last;
}
```
Gaein nidb 2020-12-11 14:48
换主题了呀,好看,另外博主现在在哪上学
LOGI 2020-01-31 01:10
明年毕业,在淮北师范,准备二战考研了
elissa 2020-01-31 01:27
多级测试
elissa 2022-04-20 16:20
你的KMS服务器监控页面是怎么做的呢?可否分享一下
Nanlon 2019-12-30 10:18
KMS和v2的状态检查通过远程服务器上的php页面使用exec函数执行 systemctl status 服务名 完成的
服务器信息是搬瓦工的API,可以通过js直接发ajax请求获得
elissa 2020-01-20 20:16