您的位置:首页 > 理论基础 > 数据结构算法

数据结构读书笔记2

2015-08-16 10:33 573 查看
一切为了:

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 *L,int 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.总结

单链表结构与顺序存储结构:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: