C++学习(三十四)(C语言部分)之 链表

  

1、栈和队列 操作 增查改删
重点 插入删除
先进先出 -->队列
先进后出 -->栈
2、链表 写之前先画图
存储数据的方式 通过指针将所有的数据链在一起
数据结构的目的 管理存储数据 方便快速查找使用

链表定义 链式存储的线性表 一对一的关系
结构体 指针 函数 循环

结构体复习:
struct 点运算符(结构体变量) 箭头运算符(结构体指针)
结构体变量.成员 的方式访问成员
字符数组 gets strcpy

链表操作
刚开始只有一个结构体
增 插入一个节点 需要申请内存
删 删除一个节点 需要释放内存

链表 需要插入的时候申请节点 需要删除的时候直接释放节点 会节约内存

静态数组 1.栈区大小 放不了态度数据
2.数组大小不能改变
动态数组 1.如果有一个数据 插入 重新申请内存 所有数据都要移动一次
2.插入删除不便
3.申请大的空间可能会申请失败

链表 有一个数据 申请一个 删除时只需要删除节点 不会影响其他节点
每次一个结构体大小 所以空间比较小 会比较节省内存 申请失败的可能性小
插入和删除比较简单不需要大规模的移动

 

测试的代码笔记如下:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct node  //定义结构体
  5 {
  6     //数据  数据域
  7     int data;
  8     //指针  指针域  存放下一个节点的地址
  9     struct node*next;
 10 }NODE, *PNODE;  //别名
 11 //结构体的类型里面不能放数据  变量里面放数据
 12 //PNODE就是struct node*  结构体指针类型  就好比int和int*
 13 
 14 void insert(PNODE head,int data)  //增
 15 {
 16     //准备要插入的节点
 17     PNODE p = (PNODE)malloc(sizeof(NODE));
 18     p->data = data;
 19     p->next = NULL;
 20     //开始插入
 21 #if 0    
 22     //头插法  head->A(没有数据)->C->D->NULL 指向要插入的节点B
 23     p->next = head->next;  //B 去保留C的地址
 24     head->next = p;  //A保留的是B的首地址
 25     //head->A(没有数据)->B->C->D->NULL
 26 #else
 27     //尾插法
 28     PNODE temp;
 29     temp = head;  //找到第一个节点的位置
 30     while (temp->next!=NULL)  //判断是不是最后的节点 next是NULL
 31     { 
 32         temp = temp->next;
 33     }
 34     //循环退出之后 temp指向它的最后一个节点
 35     temp->next = p;
 36 
 37 #endif
 38 }
 39 
 40 void findData(PNODE head, int data)  //查
 41 {
 42     //查找
 43     PNODE temp = head->next;  //从第二个元素开始
 44     while (temp!=NULL)  //从头到尾一个一个找
 45     {
 46         if (temp->data == data)
 47         {
 48             //数据匹配
 49         }
 50         temp = temp->next;
 51     }
 52     
 53     //PNODE temp = head;
 54     //while (temp->next!=NULL)
 55     //{
 56     //    if (temp->next->data == data)  //temp指向第一个节点
 57     //    {
 58 
 59     //    }
 60     //    temp = temp->next;
 61     /
                    
相关文章