zoukankan      html  css  js  c++  java
  • 线性表(链式存储结构)

    链式与顺序结构的最大区别在于,插入或删除操作需要移动大量元素。

    链表类型:单链表,循环链表,双向链表。

    单链表的组成:每个数据元素内包括两个域:数据域和指针域。

    单链表的创建方式有两种:一种是头插法和尾插法。

    循环链表:单链表最后一个节点的指针域不为空而是指向链表的头结点。

     双向链表与单链表的区别在于为了直接获取节点的前趋而加上一个指向前趋节点的指针域。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElemType;
    
    typedef struct Node{
        ElemType data;
        struct Node *next;
    }ListNode;
    
    typedef ListNode *LinkList; 
    
    /**
    ***插入 
    ***/ 
    void InsertList(LinkList head, int i, ElemType x)
    {
        ListNode *p, *s; 
        int j = 0;
        p = head;
        while(p != NULL && j < i - 1) {
            p = p->next; 
            ++j;
        }
        if (p == NULL) {
            printf("ERROR
    ");
            return ;
        } else {
            s = (ListNode *)malloc(sizeof(ListNode));
            s->data = x;
            s->next = p->next;
            p->next = s;
        }
    }
    /**
    *** 删除 
    **/
    ElemType DeleteList(LinkList head, int i)
    {
        ListNode *p, *s;
        ElemType x;
        int j = 0;
        p = head;
        while (p != NULL && j < i - 1) {
            p = p->next; ++j;
        }    
        if (p == NULL) {
            printf("position error
    ");
            return -1;
        } else {
            s = p->next;
            p->next = s->next;
            x = s->data;
            free(s);
            return x;
        }
    }
    
    /**
    **头插法 
    **/
    LinkList CreateListHead()
    {
        LinkList head = NULL;
        ListNode *p;
        int ch;
        while( (ch = getchar() )!= '
    ') {
            p = (ListNode *)malloc(sizeof(ListNode));
            p->data = ch;
            p->next = head;
            head = p;
        }
        return head;
    }
    /**
    ** 尾插法 
    **/
    LinkList CreateListTail() 
    {
        LinkList head = (ListNode *)malloc(sizeof(ListNode));
        ListNode *p, *r;
        int ch;
        r = head;
        while( (ch = getchar()) != '
    ') {
            p = (ListNode *)malloc(sizeof(ListNode));
            p->data = ch;
            r->next = p;
            r = p; 
        }
        r->next = NULL;
        return head;
    }
    
    ListNode *LocateNodek(LinkList head, ElemType k) 
    {
        ListNode *p = head->next;
        while(p && p->data != k) {
            p = p->next;
        }    
        return p;
    }
    
    ListNode *GetNodei(LinkList head, int i) 
    {
        ListNode *p; int j = 1;
        p = head->next;
        while( p!= NULL && j < i) {
            p = p->next; ++j;
        }
        if (j == i) 
            return p;
        else 
            return NULL;
    } 
  • 相关阅读:
    Mysql 安装
    网站搭建 so easy
    git 命令!!!!!!!!!!!
    git branch 管理常用命令
    Java开发环境的搭建以及使用eclipse从头一步步创建java项目
    git 放弃本地修改 强制更新
    java算法之猴子排序睡眠排序
    sql业务需求,查询每个分类下的前两n条数据
    mysql安装
    linux服务自启
  • 原文地址:https://www.cnblogs.com/Python-233/p/14947863.html
Copyright © 2011-2022 走看看