数据结构读书笔记2

一切为了:
Merge
1.《大话数据结构》

1.个人感觉,这一块《大话数据结构》作者搞的略混。代码也有少许我不赞成的地方,会在之后的工作中,改正我认为不完美的地方。
2.毕竟现在不是大师,改正过程中我会以实际运行为标准,并且查阅相关的大牛们编著的书籍。
3.正如我开头所说一切为了Merge,形成自己的知识体系才是重要的。

1.单链表

  • 有时为了方便,第一个结点设头结点,可以存储线性表长度等附加信息

    头指针头结点的异同:
    这里写图片描述

/*线性表单链表存储结构---C实现*/
typedef struct Node
{
    ElemType data;     //注意这里的ElemType
    struct Node *next;
} Node;
typedef struct Node *LinkList;

2.单链表的读取

算法思路:

  • 声明一个结点p指向链表第一个结点,初始化j从1开始
  • 当j
Status GetElem(LinkList L,int i,ElemType *e)
{
    int j;
    LinkList p;
    p = L->next;
    j = 1;
    while(p && j<i)
    {
        p = p->next;
        ++j;
    }
    if( !p || j>i)
        return ERROR;
    *e = p->data;
    return OK;
}

3.单链表的插入与删除

插入结点的算法思路
这里写图片描述

Status ListInsert(LinkList *L,int i,ElemType e)
{
    int j;
    LinkList p,s;
    p = *L;
    j = 1;
    while( p && j<i)
    {
        p = p->next;
        ++j;
    }
    if( !p || j>i)
        return ERROR;
    s = (LinkList)malloc(sizeof(Node));
    s->data = e;
    s->next = p->next;
    p->next = s;
    return OK;
}

这段代码要注意的是s->next = p->next; p->next = s; 这两个的顺序。

删除操作
实际要做:p->next = p->next->next

算法思路:

这里写图片描述

Status ListDelete(LinkList *L,int i;ElemType *e)
{
    int j;
    LinkList p,q;
    p = *L;
    j = 1;
    while(p->next &&j<i)
    {
        p = p->next;
        ++j;
    }
    if(!(p->next) || j>i)
        return ERROR;
    q = p->next;
    p->next = q->next;
    *e = q->data;
    free(q);
    return OK;
}

4. 单链表的整表创建

这里写图片描述

/*随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)*/
void CreateListHead(LinkList *L,int n)
{
    LinkList p;
    int i;
    srand(time(0));  //初始化随机数种子
    *L = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;
    for(i=0;i<n;i++)
    {
        p = (LinkList)malloc(sizeof(Node));
        p->data = rand()%100+1
        p->next = (*L)->next;
        (*L)->next = p;
    }
}
/*随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)*/
void CreateListTail(LinkList *Lint n)
{
    LinkList p,r;
    int i;
    srand(time(0));
    *L = (LinkList)malloc(sizeof(Node));
    r = *L;
    for(i=0;i<n;i++)
    {
        p = (Node*)malloc(sizeof(Node));
        p->data = rand()%100+1;
        r->next = p;
        r = p;
    }
    r->next = NULL;
}

5.单链表的整表删除

算法思路:
这里写图片描述

Status ClearList(LinkList *L)
{
    LinkList p,q;
    p = (*L)->next;
    while(p)
    {
        q = p->next;
        free(p);
        p = q;
    }
    (*L)->next = NULL;
    return OK;
}

6.总结

单链表结构与顺序存储结构:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值