解题思路:基本思想都是链表的增删改查

注意事项:代码是正确的但是不重要,知道思路代码很容易写出来

参考代码:

#include<stdio.h>

#include<string.h>

#define max 11

typedef char c[8];

typedef struct

{

c data;//数据

int next;//游标

}node;

node arr[max];//定义静态数组

void go()//初始化链表

{

memset(arr, 0, sizeof(arr));//将内存清空避免出现乱码

for (int zero = 0; zero < max - 1; zero++)

{

arr[zero].next = zero + 1;

}

arr[max - 1].next = 0;

}

int fr(node arr[max])

{

int num = arr[0].next;//记录空闲节点

if (num != -1)

{

arr[0].next = arr[num].next;//更新游标

}

return num;//返回空闲节点

}

void insert(int where,c e)//指定插入

{

int number = 1;//用来寻找要插入的位置

int kong = fr(arr);

for (int one = 1; one < where; one++)

{

number = arr[one].next;//遍历到要插入的节点的前面

}

arr[kong].next = arr[number].next;

arr[number].next = kong;

strcpy(arr[kong].data, e);

}

void prin()

{

for (int zero = 0; zero < max; zero++)

{

printf("%-8s%2d\n", arr[zero].data, arr[zero].next);//按题目要求打印

}

printf("********************\n");

}

void search(c e,int len)

{

int num = arr[1].next;

for(int zero=0;zero<len;zero++)

{

if (!strcmp(e, arr[num].data))

{

printf(" %d\n", num);

printf("********************\n");

return;

}

num = arr[num].next;

}

//如果姓氏不在表中


printf("查找失败,请确认姓氏是否在表中\n");

return;




}


void free_node(int k1)

{

   arr[k1].next = arr[0].next; // 新节点指向当前的空闲链表头

   arr[0].next = k1; // 更新空闲链表头为新节点

}

void delete(int where)

{

int k = 1;

int num1 = 1;//通过遍历找到要删除的节点的前一个节点

for (k; k < where; k++)

{

num1 = arr[num1].next;

}

int A = arr[num1].next;//记录要free掉的节点

arr[num1].next = arr[A].next;

free_node(A);



}

int main()

{

go();

int len = 0;//用len记录链表有值长度,减少后面的查找时间

int a = arr[0].next;

arr[0].next = arr[1].next;

arr[1].next = 0;

char mingling[100];

while (scanf("%s",mingling) != EOF)

{

if (!strcmp("insert", mingling))

{

int where;

scanf("%d", &where);

c e;

scanf("%s", e);

insert(where, e);

len++;

}

else if (!strcmp("show", mingling))

{

prin();

}

else if(!strcmp("search", mingling))

{

c e;

scanf("%s", e);

search(e, len);

}

else if(!strcmp("delete", mingling))

{

int where;

scanf("%d", &where);

delete(where);

}

}


return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论