首页 > 代码库 > 数据结构——单链表
数据结构——单链表
1.对于一个有数据的单链表,如果要对其初始化,使用下列操作:
1 void initList(sqlist &L){ #对于需要改变的变量或链表,使用引用型 2 L.length==0; 3 } //单链表长度重置为0
2.单链表有4中操作:归并,插入,删除,查找
归并的实现:(链表A,B是有序的,且归并后的C也是有序的)如下:
1 void merge(LNode *A,LNode *B,LNode *&C){ //将A B两个链表归并为一个新的单链表(链表C采用引用型) 2 LNode *p = A -> next; //指向头结点后的数据,若A表示递增序列,则指向A的最小值 3 LNode *q = B -> next; 4 LNode *r; 5 C = A; 6 C -> next = NULL; //从A中取下头结点作为C的头结点 7 free(B); //释放B的头结点(A的头结点已经给C用,B无用故释放,反之释放A) 8 r = C; //r指向C的头结点 9 10 while(p!=NULL&&q!=NULL){ //为了归并后的C是有序的这里表示递增,两个链表数据均未遍历完执行循环 11 if(p -> data <= q -> data){ 12 r -> next = p; 13 p = p -> next; 14 r = r -> next; //判断p小(即A链表中的数值小),p放在C头结点后,链表A,C数据均右移 15 } 16 else{ 17 r -> next = q; 18 q = q -> next; 19 r = r -> next; //q小,同上 20 } 21 22 } 23 r -> next = NULL; //指向C终结点 24 25 if(p!=NULL) 26 r -> next = p; 27 if(q!=NULL) 28 r -> next = q; //若A,B链表有一方遍历完则执行这两句判断语句,那个链表没有遍历完,那个链表的余下数据直接按顺序连在C的终结点上即可 29 30 }
单链表插入有两种,尾插法和头插法
假设有n个元素已经存储在数组a中。
头插法:
1 void createlistF(LNode *&C,int a[],int n){ 2 LNode *s,*r; 3 int i; 4 C = (LNode *)malloc(sizeof(LNode)); 5 C -> next = NULL; 6 r = C; 7 for(i = 0;i < n;++i){ 8 s=(LNode *)malloc(sizeof(LNode)); 9 s -> data =http://www.mamicode.com/ a[i]; 10 s -> next = C -> next; //s所指新结点的指针域指向C的开始结点 11 C -> next = s; //头结点指针域指向s,使s再次成为开始结点 12 } 13 r -> next = NULL; //指针域为空,就表示链表建立完成 14 }
尾插法:
1 void createlistR(LNode *&C,int a[],int n){ 2 LNode *s,*r; 3 int i; 4 C = (LNode *)malloc(sizeof(LNode)); //申请头结点空间 5 C -> next = NULL; 6 r = C; 7 for(i = 0;i < n;++i){ 8 s=(LNode *)malloc(sizeof(LNode)); //s指向新申请的结点 9 s -> data =http://www.mamicode.com/ a[i]; 10 r -> next = s; //s取得的值赋给r的数据结点 11 r = r -> next; //r始终指向终结点,保证了下次的数据存储始终是在尾部 12 } 13 r -> next = NULL; //指针域为空,就表示链表建立完成 14 }
头插法的特征就是有序链表按顺序归并为新链表时会变成倒序,即递增变递减,递减变递增。
头插法的关键步骤:
1 s -> next = C -> next;
2 C -> next = s;
两个顺序不可颠倒,若颠倒则当C -> next指向s之后,之前的C -> next地址将丢失而无法被找到!
单链表插入类似这样:
3.单链表删除:
1 q = p -> next; //指向要删除的结点
2 p -> next = p -> next -> next;
3 free(q); //释放指针q所指的结点时数据也会消失。这是完整的删除过程
4:单链表查找操作:
1 int findData(LNode *C,int x){
2 LNode *p ;
3 p = C;
4 while(p -> next != NULL){
5 if(p -> next -> data =http://www.mamicode.com/= x)
6 break; //找到匹配项,跳出循环
7 p = p -> next;
8 }
9 if(p -> next == NULL)
10 return False
11 }
数据结构——单链表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。