zoukankan      html  css  js  c++  java
  • 数据结构——第二章 线性结构

    线性结构:

    特点:

    1头儿 只有没有前驱只有后继

    2中间的 既有前驱也有后继

    3尾 没有后继只有前驱

    4逻辑相邻,物理也相邻。

    常用的:

    线性表(顺序表,链表)

    队列

    存储结构:

    定义顺序表——数组

    建表——查询——增删改查

    单向链表:

     1.新建链表

    C语言结构体:

    struct node

    {

    int data;

    struct node *next;

    }

    struct node *p1,*p2,*p3;

    p1 = new node;

    p1->data = a1;

    p2 = new node ;

    p2->data = a2;

    ... 这样写太复杂,可以用队列或者栈的循环来写

     2.链表查询

    第一步:如果没找到这个数据,p=p->next

    while(p->data!=a3)

    p=p->next

    3.链表插入

    插入S结点:

    第一步:指向a3前面结点。

    第二步:先连后断。

    while(p->next->data!=a3)

    p=p->next

    s->next = p->next

    p-next = s 

    4.链表的删除

    第一步:找到a3前面的结点p,

    第二步:Q为p的下一个结点,q的下一个结点是p的下一个结点

    while(p->next->data!=a3)

    p=p->next

    q=p->next;

    p->next=q->next;

    5.链表逆序

    链表逆序的循环算法

    设置prev=NULL,next这两个指针,next为head->next ,让head的next为prev,这时A就从链表中脱离出来,然后prev,head,next 向前推进,

    让prev为head,head为next,

    下一步

    循环的终止条件是head指针为NULL。

     link_NODE * reverse(link_NODE *head)

    {

     LINK_NODE *next;

     LINK_NODE *prev = NULL;

    while(head!=NULL)

        {

          next = head->next;

          head->next = prev;

          prev = head;

          head = next;

        }

     return prev;

    自己蒙着眼睛写一个-。-

    reverse( linknode *head)
    {

    linknode * next;
    linknode * prev = null;

    while(head != null)
    {
     
    next = head->next; 设置next位
    head->next = prev; 第一个链表元素脱离
    prev = head; 当前结点标记为prev
    head = next; 下一个节点标记为head

    }
    return prev;
     
    }
     
    链表逆序的递归算法
     
    //递归调用
    Node * reverseRecursion(Node *head)
    {
        if (head == NULL||head->next == NULL)
        {
            return head;
        }
    
        Node *second = head->next;
        head->next = NULL;
    
        Node *rest = reverseRecursion(second);
    
        second->next = head;
    
        return rest;
    }
     
    双向循环链表的插入(先连后断)
     
     
    p->prior = current;
    p->next = current->next;
     
    current->next = p;
    p->next->prior = p;
     
  • 相关阅读:
    更好的处理 Python 多工程 import 依赖
    Django 前后台的数据传递
    Django传递数据给JS
    nodejs 设置跨域访问
    Node.js + Express
    前端用户输入校验--基于JQ
    git统计当前分支提交次数
    gitlab相关
    CentOS7使用firewalld打开关闭防火墙与端口
    puppeteer安装/爬取数据
  • 原文地址:https://www.cnblogs.com/eret9616/p/8120228.html
Copyright © 2011-2022 走看看