基本操作之一(单链表的建立与遍历)
一、使用typedef 创建构造数据类型时
1 typedef struct LNode 2 { 3 ElemType data; //数据域 4 struct LNode *next; //指针域 5 } LNode, *LinkList;
若有迭代(在第四行),则第一行的“LNode”不可省略。
二、LNode *和*LinkList是等价的(都可以用来指向新的节点)
为了提高程序的可读性,在此对同一结构体指针类型起了两个名称
1 int a = 9; 2 LNode L1; 3 L1.data = a; 4 L1.next = NULL; 6 LinkList L2;//用LinkList定义结构体变量L2 7 L2 = &L1; 9 LNode *L3; 10 L3 = &L1;
三、初始化和创建单链表时要用引用调用保存数据
1 Status InitList( LinkList & ); //函数声明 2 3 Status InitList( LinkList &L ) 4 5 void CreateList( LinkList &, int ); //函数声明 6 7 void CreateList( LinkList &L, int n )
四、若要访问结构体指针类型内的成员变量,有两种方式:p-> 和 (*p).
1 void CreateList( LinkList &L, int n ) 2 { 3 LNode *p, *r; 4 r = L ; //尾指针r指向头结点 5 for( int i=0; i<n; ++i ) 6 { 7 p = new LNode ; 8 cin >> (*p).data; 9 p->next = NULL; 10 r->next = p; 11 r = p ; 12 } 13 }
五、清空链表
1 void DestroyList( LinkList L ) 2 {//回收L的所有结点的空间 3 LNode *p = L, *q;//L已经是一个地址了所以不用& 4 while ( p ) //当p指向结点不为空 5 { 6 q = p->next; //q指向p的下一结点 7 delete p; //回收p指向的结点空间 8 p = q; //p指向q指向的结点 9 } 10 }