zoukankan      html  css  js  c++  java
  • C语言实现线性表(链式存储方式)

    #include <stdio.h>
    #include <stdlib.h>  //提供malloc()原型
    
    typedef struct LNode *List;
    typedef int ElementType;
    //定义数据结构的自定义名称
    
    
    struct LNode{
        ElementType Data;       //数据域
        List Next;              //指针域
    };
    
    struct LNode L;
    List PtrL;
    
    int Length(List PtrL) //链表头指针
    /*表长*/
    {
        List p = PtrL;   //临时的指针 p 指向表的第一个节点
        int j = 0;  //计数器作用
        while(p)  //遍历单向链表
        {
            p = p->Next;
            j++;          //当前p指向的是第j个节点
        }
        return j;
    }
    
    List FindKth(int K,List PtrL)
    /*查找-序号*/
    {
        List p = PtrL;
        int i = 1;
        while (p!= NULL && i < K)
        {
            p = p->Next;
            i++;
        }
        if (i==K)
        {
            return p;  //找到K位置,返回指针
        }
        else
        {
            return NULL; //未找到,返回空
        }
    }
    
    
    List Find(ElementType X,List PtrL)
    /*查找-值*/
    {
        List p = PtrL;
        while (p != NULL && p->Data != X)
        {
            p = p->Next;
        }
        return p; //找到X,返回指针,未找到X,返回NULL
    }
    
    
    List Insert(ElementType X, int i, List PtrL)
    /*插入*/
    //步骤: 1、 构造一个新结点,用s指向
    //      2、 找到链表的第i-1个结点,用p指向
    //      3、 然后修改指针,插入结点
    //      s-Next指向 p->Next,p->Next指向s,
    {
        List p , s;
        if(i == 1) //表头插入结点
        {
            s = (List )malloc(sizeof(struct LNode)); //申请结点空间
            s->Data = X;   //填充结点
            s->Next = PtrL;
            return s;
        }
        p = FindKth(i-1, PtrL);   //查找第i-1个结点
        if(p==NULL)
        {
            printf("参数%d错误",i);
            return NULL;             //i-1结点不存在
        }
        else
        {
            s = (List)malloc(sizeof(struct LNode)); //申请结点空间
            s->Data = X;
            s->Next = p->Next;
            p->Next = s;
            return PtrL;
        }
    }
    
    List Delete(int i, List PtrL)
    /*删除*/
    {
        List p ,s;
        if(i==1)        //删除表的第一个节点
        {
            s = PtrL;   //s指向第一个节点
            if (PtrL != NULL)
            {
                PtrL = PtrL->Next; //从链表中删除
            }
            else
            {
                return NULL;
            }
            free(s);  //释放s
            return PtrL;
        }
        p = FindKth(i-1 , PtrL); //查找第i-1个结点
        if (p == NULL)
        {
            printf("%d 节点不存在",i-1);
            return NULL;
        }
        else if (p ->Next == NULL)
        {
            printf("%d 节点不存在",i);
            return NULL;
        }
        else
        {
            s = p->Next;     //s 指向第i个结点
            p->Next = s->Next;  //从链表中删除
            free(s);            //释放被删除的结点
            return PtrL;
        }
    }
    
    
    int main()
    {
        int j;
        int i =1;
        List p;
    
        j=Length(PtrL);      //计算长度
        printf("当前长度:%d
    ",j);
    
        PtrL=Insert(5,1,PtrL);  //在表头插入结点
    
        p=FindKth(1,PtrL);
        printf("查找头结点的值:%d
    ",p->Data); //按照序号查找并打印结果
    
        p=Find(5,PtrL);
        printf("查找数值5:%d
    ",p->Data); //按照值查找并打印结果
    
         printf("插入数值3
    ");
        Insert(3,2,PtrL);  //插入操作
    
        p=Delete(1,PtrL);
        printf("删除头结点后,当前头结点数值:%d
    ",p->Data); //删除头结点
    
        j=Length(&L);      //计算长度
        printf("当前长度:%d
    ",j);
    
        return 0;
    }
  • 相关阅读:
    MySQL在windows上的安装步骤
    k-均值聚类算法
    python2和python3中filter函数
    解决mysql出现的问题#1055
    python高级编程1
    二叉树
    Python常用算法(二)
    Python常用算法(一)
    Java蓝桥杯--入门训练(1) Fibonacci数列
    java基础--for-跑步运动
  • 原文地址:https://www.cnblogs.com/flashBoxer/p/9398949.html
Copyright © 2011-2022 走看看