1.链表的实现:插入结点,想要动态分配内存,如果分配的内存为空,则内存分配失败。
2.序号查找:for循环查找,关键字查找:while循环
3.链表的缺点就是不管查找,删除都是的从头结点开始遍历。
4.如果数据项只有一个,则只用一个结构体,如果数据项有多个,则要定义两个结构体。
#include<iostream>
#include<string>
using namespace std;
struct Data {
string key;
string name;
int age;
};
typedef struct Node {
struct Data data;
struct Node *next;
}LNode,*LinkList;
//建立单链表:头插法和尾插法
//分配内存空间 ,头指针为null
LinkList CreateList1(LinkList head, Data std)
{
LinkList node;
if (!(node = new LNode))
{
cout << "内存分配失败!" << endl;
return 0;
}
else
{
node->data = std;
node->next = head;
head = node;
return head;
}
}
LinkList CreataList2(LinkList head, Data std)
{
LinkList node, test;
if (!(node = new LNode))
{
cout << "内存分配失败!" << endl;
return 0;
}
else
{
node->data = std;
node->next = NULL;
if (head == NULL)
{
head = node;
return head;
}
else
{
test = head;
while ((test->next) != NULL)
{
test = test->next;
}
test->next = node;
return head;
}
}
}
LinkList FindList1(LinkList head, int k)
{
LinkList test;
test = head;
for (int i = 1; i < k&&test; ++i)
{
test = test->next;
}
return test;
}
LinkList FindList2(LinkList head,string name ) //以name为例
{
LinkList test;
test = head;
while (test)
{
if (test->data.name == name)
{
return test;
}
test = test->next;
}
return NULL;
}
LinkList InsertList(LinkList head, int k, Data data)
{
LinkList test,exam;
if (!(test = new(LNode)))
{
cout << "分配内存失败!" << endl;
}
else
{
test->data = data;
exam = FindList1(head, k - 1);
if (exam)
{
test->next = exam->next;
exam->next = test;
}
else
{
cout << "没有找到插入的位置!" << endl;
delete test;
}
}
return head;
}
LinkList DeleteList1(LinkList head, int k)
{
LinkList a, b;
a = FindList1(head, k - 1);
b = FindList1(head, k);
a->next = b->next;
return head;
}
LinkList DeleteList2(LinkList head, string name)
{
LinkList test, exam;
test = FindList2(head, name);
if (test)
delete test;
else
return 0;
}
int LenList(LinkList head)
{
LinkList test;
int len=0;
test = head;
while (test)
{
++len;
test = test->next;
}return len;
}
void DisplayList(LinkList head)
{
LinkList test;
test = head;
while (test)
{
cout << test->data.key <<"\t"<< test->data.name << "\t" << test->data.age << endl;
test = test->next;
}
}
int main()
{
LinkList lis, head = NULL;
Data data;
string name;
cout << "请先输入链表中的数据,格式为:学号,姓名,年龄(年龄为0时停止输入)" << endl;
while (1)
{
cin >> data.key >> data.name >> data.age;
if (data.age == 0)
{
break;
}
head =CreateList1(head, data);
}
DisplayList(head);
//等等调用函数的操作,再不一一列举。
system("pause");
return 0;
}