前篇:
动态链表学习笔记:构建与输出-CSDN博客
情境引入:
学习了动态链表的输入输出后,若还需要对其进行进一步的操作,要怎么实现呢?为了更好的学习链表的操作,我们不妨根据一个实际情境进一步完善上次的程序:
题目:写一个链表的程序,使其能完成数据的插入,删除与查找
数据包括工人的编号,姓名和年龄
我对上期的代码主要做了如下的修改:结构体的数据数量调整,变为工人的编号,姓名,年龄三个变量;输入输出部分也进行了相应的改动。
#include<iostream>
using namespace std;
struct node
{
char num[30];
char name[30];
int age;
struct node* next;
};
node* head;
void create()
{
node* p = NULL, * s;
s = new node;
cin >> s->num;
cin >> s->name;
cin >> s->age;
head = NULL;
while (s->num != NULL && s->age != NULL && s->name != NULL) {
if (head == NULL)head = s;
else p->next = s;
p = s;
s = new node;
cin >> s->num;
cin >> s->name;
cin >> s->age;
}
p->next = NULL;
delete s;
return;
}
int main()
{
node* p;
create();
p = head;
while (p != NULL)
{
cout << p->num << " " << p->name << " " << p->age << endl;
p = p->next;
}
return 0;
}
输出部分如图 :
一、数据的查找
1.要求:
输入数据在链表中的位置,检索链表输出对应元素
2.思路:
因为插入与删除需要用到数据的查找,调用查找函数找到相应的位置直接进行相应的修改即可,所以我们从查找做起。
我们查找的逻辑是:输入了元素的位置后,先判断输入是否合理(这个变量起码要大于0)我们只需要在函数中添加一个循环控制变量,当变量和我们输入的元素位置的变量相等时返回对应的指针。如果没有遍历到,那么就返回空指针。
所以循环的条件就很容易想到,就是链表指向的