数据结构.单链表

1.单链表(有头结点,无头节点)

数据结构.单链表_第1张图片

数据结构.单链表_第2张图片

2.插入

数据结构.单链表_第3张图片

数据结构.单链表_第4张图片

不带头结点的处理起来会麻烦一些。

数据结构.单链表_第5张图片

数据结构.单链表_第6张图片

数据结构.单链表_第7张图片

3.删除

数据结构.单链表_第8张图片

数据结构.单链表_第9张图片

数据结构.单链表_第10张图片

4.查找

数据结构.单链表_第11张图片

数据结构.单链表_第12张图片

5.建立链表

数据结构.单链表_第13张图片

数据结构.单链表_第14张图片

6.头插法可以用来实现链表的逆置

数据结构.单链表_第15张图片

代码:

#include
using namespace std;
const int N = 10;
typedef struct LNode {
    int data;
    LNode* next;

}LNode,*LinkList;


LinkList TailInsert(LinkList& L)//尾插
{
    int x;
    L = (LinkList)malloc(sizeof(LNode));
    LNode* p, *s=L;
    cin >> x;
    while (x <= 9999)
    {
        s = (LNode*)malloc(sizeof(LNode));
        s->data = x;
        p->next = s;
        p = s;
        cin >> x;
    }
    p->next = NULL;
    return L;

}

LinkList HeadInsert(LinkList&L)//头插
{
    int x;
    LNode* p, * s = L;
    L = (LinkList)malloc(sizeof(LNode));
    cin >> x;
    while (x <= 9999) {
        s = (LNode*)malloc(sizeof(LNode));
        s->data = x;
        s->next = p->next;
        p->next = s;
        cin >> x;
    }
    return L;
}

LinkList CheckByData(LinkList L, int e)//按值查找
{
    LNode* p = L->next;
    while (p->data != e&&p!=NULL)
    {
        p = p->next;

    }
    return p;
}

LinkList CheckByIndex(LinkList L, int index)//按位查找
{
    LNode* p = L;
    for (int i = 0; i < index; i++)
    {
        p = p->next;

    }
    return p;
}

void del(LNode* p)//删除p结点
{
    LNode* q = p->next;
    p->data = q->data;
    p->next = q->next;
    free(q);
}

void ForHeadInsert(LNode* p, int e)//在p结点的前面插入数据为e的结点
{

    LNode* s = (LNode*)malloc(sizeof(LNode));
    s->next = p->next;
    p->next = s;
    s->data = p->data;
    p->data = e;
}

int main()
{
    LinkList L;
    //。。。



    return 0;
}

你可能感兴趣的:(数据结构,数据结构)