解题思路:基本思想都是链表的增删改查
注意事项:代码是正确的但是不重要,知道思路代码很容易写出来
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复