数据结构——第二章 线性结构

线性结构:

特点:

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;
 
原文地址:https://www.cnblogs.com/eret9616/p/8120228.html