线性表可分为顺序存储结构和链式存储结构
顺序存储结构的创建,其实就是一个数组的初始化,即声明一个类型和大小的数组并赋值的过程。而单链表和顺序存储结构就不一样,它的每个数据的存储位置不需要像数组那样集中,它可以很散,是一种动态结构。对于每个链表来说,它所占用的空间大小和位置并不需要预先分配划定,可以根据系统的情况和实际的需求即时生成。所以,创建单链表的过程就是一个动态生成链表的过程。即从“空表”的初始状态起,一次建立各元素结点,并逐个插入链表。
单链表的整表创建
单链表的整表创建主要有两种方法,即头插法和尾插法,下面分别对这两种方法进行介绍
链表类
首先在类中声明数据成员
1 memberCar *next
1.头插法
memberCar *head=NULL; //此处为类外,函数上面,通常建立一个空的表头,表头不存数据,便于释放
void create(memberCar *&head) //头插法,创建节点 { memberCar *p, *s = head;//head为头节点,s为p前面的一个节点,p为要插入的节点
p = new memberCar(); p->next = NULL;
/*if (head == NULL) //不建议这种写法(不利于释放),头节点为空的情况 { head = p; //p就是头节点,此时s也为头节点 s = p; return; }*/ //插入 p->next = s->next; s->next = p; }
2.尾插法
//定义为全局变量,创建链表表头和尾节点
memberCar *head=NULL;
memberCar *pend = NULL;
void create() //尾插法,创建节点
{
memberCar *p ;
p = new memberCar();
p->next = NULL;
//判断,如果头节点为空,由于没有数据成员next,则不能指向下一节点
if (head==NULL)
{
head= p;
pend = p;
}
else
{
pend->next = p;//原来的尾指针指向新建的p
pend = p;//然后尾指针的位置再等于新建指针的位置
}
}
然后就是对链表执行操作(如果是对特点的节点操作,那么就可以用if条件语句遍历)
//此处为遍历链表,注意对链表的操作,包括调用函数,修改数据成员都需要遍历 void show(memberCar *head) //传入链表头指针 { memberCar *showname = head; while (showname) { showname->print(); //链表调用 showname = showname->next; } }
最后就是删除链表,思路:遍历,先定义一个指针,指向头节点。然后判断头节点的下一节点是否为空,不为空则让指针指向头节点的下一节点,然后删了头节点,然后头节点再等于指针所在的节点。循环,以此类推,直到全部删掉。最后定义的指针为NULL。大功告成。
1 memberCar *tou; 2 tou = head; 3 while(tou->next != NULL) 4 { 5 tou = tou->next; 6 delete head; 7 head = tou; 8 } 9 delete tou;