从这个暑假开始,学完了基本算法的我,已经开启了数据结构之旅,第一个数据结构是“线性表”,分为链式存储结构和顺序存储结构,一个是顺序表(相当于数组),另一个是链表,分为单链表、双向链表、循环链表(用指针来进行和顺序表一样的操作),在这两个之中,顺序表较为简单,链表就是比较绕,很多人可能会忘记些什么。
而我,在这个星期里面,一步一步听课,写代码,学会了关于单链表的许多操作,今天,我就来写一个关于单链表的总结!
首先,我们需要学会怎么样来定义一个单链表!
- 我们要知道一个链表的长度是多少。可以用length来表示。
- 我们还要知道这个链表的数据域是什么。用data来表示。
- 最后还需要知道这个链表的指针域指向的哪里。用nxet来表示 ,next代表着链表的指针域,所以是一个指针,需要加上*号。
这样,我们就可以定义一个结构(struct)了,用Node来表示这个结构
定义一个链表代码:
struct Node
{
int data;
int length;
struct Node* next;
};
现在,只需要在气体地方写上Node *L,就代表创建了一个链表!
定义了一个链表后,需要先来初始化后才可以使用,在这里,可以使用new函数,意思是分配一个空间,那我们要将空间分配给谁呢?自然是给这个结构了,这个链表有了空间之后,我们需要将这个链表设置为空,那么只需要让这个链表的指针域指向NULL(表示为空)就行了!
链表初始化代码:
bool initList_L(Node *&L)//链表初始化
{
L=new Node;
L->next=NULL;
return true;
}
指针一般都以->代表指向着什么东西!
定义链表后,又初始化了链表,接下来就可以使用链表了,我们的第一个操作就是判断这个链表是不是空链表(指针域指向空),怎么判断呢,只需要判断一下这个链表的指针域是不是指向空的,是就返回true,不是就代表这个链表的指针域指向了别的东西,返回false。
判断当前链表是否为空代码:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct Node
{
int data;
int length;
struct Node* next;
};
bool initList_L(Node *&L)//链表初始化
{
L=new Node;
L->next=NULL;
return true;
}
bool ListEmpty(Node *L)//判断链表是否为空
{
if(L->next)
return false;
else
return true;
}
int main()
{
Node *p;
initList_L(p);
if(ListEmpty(p)==1)
cout<<"当前链表为空"<<end