链表的理解
开发工具与关键技术:Visual Studio、C++
作者:张国军
撰写时间:2019年05月13日
链表,通过这段时间对链表的理解。最终有了个人的理解。
我对链表的理解呢,就是一个节点一个节点连接起来的。节点由我们的数据结构构成,我们可以用(struct,class)去创建节点。开始的时候我也有尝试着去用(union)去做连表,但是得出来的结果并不是我想要的,它里面的数值会发生改变,我猜是因为(union)内存共用的问题,所以用(union)做出来的数据不是我想要的。
链表有单向链表、双向链表,也许也有可能有多向链表,就相当于:植物(高等植物、低等植物)的格式出现,我想它也是可以成立的,这个还得以后慢慢去尝试。
下面是我写的一个单链表的汽车店的服务类型的吧。主要有三个功能(进购车辆、销售车辆、查看车库库存车辆)。下面是我的代码实现。
#include <iostream>
using namespace std;
class Plural {
public:
static int aa;//序号自增
unsigned int a;//序号
unsigned int b;//价格
char name[10];//名字
Plural * p;
static Plural * head;
Plural();
~Plural();
private:
};
Plural::Plural() {
a = 0;
b = 0;
p = NULL;
}
Plural::~Plural() {
cout << "销售成功!";
}
Plural * Plural::head = NULL;
int Plural::aa = 1;
//查看车辆库存信息
void examine() {
if (Plural::head == NULL) {
cout << "目前没有销售车辆可查询";
}
else {
Plural *l;
l = Plural::head;
while (l != NULL)
{
cout <<"序号:"<<l->a<<"\t价格:"<< l->b << "\t名称:" << l->name << endl;
l = l->p;
}
}
}
void aad() {//进购车辆
unsigned int i;
Plural *m;
Plural *n = NULL;
cout << "填写车辆价格: ";
cin >> i;
while (i != 0)
{
m = new Plural;
m->b = i;
cout << "填写车辆名称: ";
cin >> m->name;
m->a = Plural::aa++;
if (Plural::head == NULL) {
Plural::head = m;
}
else
{
n = Plural::head;
while (n->p != NULL)
{
n = n->p;
}
n->p = m;
}
cout << "填写车辆价格: ";
cin >> i;
}
m = NULL;
}
void sell(int b) {//根据序号进行销售车辆
Plural * q,*p;
q = Plural::head;
p = Plural::head;
if (p->a != b) {
p = p->p;
}
while (p->a!=b)
{
q = q->p;
p = q->p;
if (p == NULL) {
cout << "没有找到您所选的序号车辆,请重新选择"<<endl;
return;
}
}
if (p == Plural::head) {
Plural::head = Plural::head->p;
}
else {
q->p = p->p;
}
delete p;
p = NULL;
}
void main() {
int a,b;
do
{
cout << "请选择:\n";
cout << "1:进购车辆, \n2:销售车辆,\n3:查看车辆库存信息 \n0:退出.\n";
cin >> a;
switch (a)// 操作选择
{
case 1: // 键入1,购进车辆
{
aad();
break;
}
case 2:// 键入2,售出车辆
{
cout << "请输入您需要购买车辆的序号: ";
cin >> b;
sell(b); break;
}
case 3:// 键入3,查看车辆库存信息
{
examine(); break;
}
case 0: break;// 键入0,结束
}
} while (a);
delete Plural::head;
Plural::head = NULL;
}
刚开始的进去的时候我们可以选择我们需要进行的服务。
当我们刚开始选择3的时候,我们没有库存会进行提示并返回。
当我们选择1服务是,我们可以新增库存,进行填对应的数据,当我们需要退出时输入0进行退出。
当我们进购完的时候我们可以进行输入3查看库存
然后我们就可以通过我们的序号进行选择购车了。
最后值得一提的是,我们链表是一个动态生成节点的,所以我们需要很好的处理我们的上一个指针,不然的话我们后边的数据将会没法获取,还有就是当我们用完的时候我们要将它进行delete,不然的话会泄漏我们的内存。
这是我对链表的理解,如果大家有什么想法、不同之处,欢迎评论留言。