Linux数据结构

数据结构和算法

  1. 培养我们的高级思维: 数据结构算法掌握–》有利于做上层应用开发

  2. 提高程序的运行效率,采用不同的存储方式,数据的增删改查操作的效率是不一样的

  3. 主要内容
    顺序表的基本操作
    链表基本操作
    (增加,删除,更改,查找数据)
    栈和队列
    树和二叉树
    常见的排序算法

  • 链表基本操作
    • 单链表
    • 单向循环链表
    • 双向链表
    • 双向循环链表
    • 内核链表

顺序表

  1. 本质:就是前面C语言学习过的数组,在数组的基础上做了二次封装,封装了结构体
    总结成公式:
     struct  你自己取名字
      {
            类型  buf[大小];
            int last;  //标记最后一个有效成员数据的下标
     };

单链表

  1. 用结构体来表示单链表
    总结成公式:
struct  单链表的名字
 {
	int data;  //数据域,用来保存数据
	struct  单链表的名字 *next;  
	//指针域,用来指向下一个数据在内存中的地址
 };
  1. 学习链表的套路
- -
方法一 p=p->next; //p指向p的下一个节点 赋值运算翻译成指向
方法二 p->next p的下一个节点
方法三 初学者,一定要画图分析链表中指针的指向,否则很容易出现段错误
方法四 当你画完图,代码进入死胡同,要么调换一些步骤或者使用两个指针操作

单向循环链表

任何链表总结成模型
   struct  链表的名字
   {
   //数据域,就是你这个链表需要存储的真实数据,可以是多个不同类型的数据
   //指针域,用来存放下一个节点在内存的首地址
   };
1. 特点
          在普通单链表的基础上,收尾相接
2. 对比单链表的写法
          while(p->next!=myhead)
3.总结链表操作的技巧

1.画图写步骤,步骤是交换
2.最厉害的武器–》用两个指针操作
3. p p->next p->next->next
4.

 while(p!=NULL) 	
 while(p->next!=NULL)

普通的双向链表

双向链表的表示
  struct  doublelist
  {
            //真实数据的数据域
            struct  doublelist *next;  //指向后面一个节点的指针
            struct  doublelist *prev; //指向前面一个节点的指针
  };

双向循环链表

  1. 特点:
    最后一个节点的next指针–》指向头结点
    头节点prev指针–》指向尾部
  2. 注意的问题
    第一:循环条件
    while(p->next!=head)
    第二:插入,初始化
    首尾相接

你可能感兴趣的:(链表,单链表,linux,数据结构)