标签:class 二级指针 注意 连续 clu bsp null 判断 一个
一.链表
1.线性存储结构:
在一个结构体中 再放一个本类型(结构体类型)的指针
这个指针不指向自己 指向的是要找的下一个结构体的地址 以此类推 没有数量限制
2.声明及链表遍历:
1 #include<stdio.h> 2 3 typedef struct AA 4 { 5 int bh; 6 char* name; 7 char* tel; 8 struct AA* pNext; 9 }Node; 10 11 int main() 12 { 13 14 Node a = {1,"aa","111",NULL}; 15 Node b = {2,"bb","222",NULL}; 16 Node c = {3,"cc","333",NULL}; 17 18 Node* p = &a; 19 20 a.pNext = &b; 21 b.pNext = &c; 22 23 while(p != NULL) 24 { 25 printf("%d %s %s\n",p->bh,p->name,p->tel); 26 p = p -> pNext; 27 } 28 29 return 0; 30 }
注:
①代码中的p存的是这个结构体的地址 而不是这个结构体的指针
②在移动p的时候 不能用p++ 链表的存储不一定是连续的 连续的空间才可以用p++
3.链表添加:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef struct NODE 5 { 6 int bh; 7 char* name; 8 char* tel; 9 struct NODE* pNext; 10 }Node; 11 12 void AddNode(int bh,char* name,char* tel,Node** ppHead,Node** ppEnd); 13 14 int main() 15 { 16 Node* pHead = NULL; 17 Node* pEnd = NULL; 18 19 AddNode(1,"aaa","111",&pHead,&pEnd); 20 AddNode(2,"bbb","222",&pHead,&pEnd); 21 AddNode(3,"ccc","333",&pHead,&pEnd); 22 AddNode(4,"ddd","444",&pHead,&pEnd); 23 24 return 0; 25 } 26 27 void AddNode(int bh,char* name,char* tel,Node** ppHead,Node** ppEnd) 28 { 29 Node* pNode = (Node*)malloc(sizeof(Node)); 30 pNode -> bh = bh; 31 pNode -> name = name; 32 pNode -> tel = tel; 33 34 if((*ppHead) == NULL) 35 { 36 *ppHead = pNode; 37 *ppEnd = pNode; 38 } 39 else 40 { 41 (*ppEnd) -> pNext = pNode; 42 *ppEnd = pNode; 43 } 44 45 return ; 46 }
思路:
①给节点申请空间 并赋值
②判断链表是否存在
分两种情况:一是不存在 那么这个新来的结点即是头 也是尾
二是存在 那么就让尾的下一个指向新来的这个结点(先连) 然后让尾指向新来的结点(后移)
注:
①整个链表是以第一个节点的地址存在的
②之所以链表有两个指针 一个头指针 一个尾指针 有了尾指针是为了省去遍历的过程 方便知道最后一个节点的位置
③在传参的时候 要注意 如果你想改变外面传进来的指针的值 那就得用二级指针
4.链表插入:
标签:class 二级指针 注意 连续 clu bsp null 判断 一个
原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/8973198.html