zoukankan      html  css  js  c++  java
  • 数据结构导论 四 线性表的顺序存储VS链式存储

    前几章已经介绍到了顺序存储、链式存储

    顺序存储:初始化、插入、删除、定位

    链式存储:初始化、插入、删除、定位

    顺序存储:初始化

    strudt student{
    int ID;//ID
    char name[30];//姓名
    char sex; //性别
    int class;//班级
    int age;//年龄
     
    }
    student={"01",“zhangsan”,"m","201","20"};
    

      

    链式存储:初始化

    //建立一个空链表
    LinkList InitiateLinkList(){
    LinkList head;  //头指针
    head =malloc (sizeof(node)); //动态构建一节点,它是头结点
    head->next=null;
    return head;

    顺序存储:插入

    void InsertSeqlist(SeqList ,DataType x,int i){
    //将元素x插入到顺序表中L的第i个数据元素之前
    if(L.length==Maxsize)
    exit("表已满");
    if(i<1||i>L.ength+1)
    exit("位置错误");
    for(j=L.length;j>=i;j--) //初始化
    L.data[j]=L.data[j-1];//依次后移
    L.data[j-1]=x;//元素x到下标为i-1的位置
    L.length++;//表长度加1
    
    
    }

    链式存储:插入

    void InsertLinklist (LinkList head, DataType x, int i)
    //在表head的第i个数据元素结点之前插入一个以x为值的新结点
    {
    Node *p,*q;
    if (i==1) q=head;
    else q=GetLinklist (head, i-1); //找第 i-1个数据元素结点
    if (q==NULL) //第i-1个结点不存在
    exit(“找不到插入的位置”);
    else
    {
    p=malloc(sizeof (Node) );p->data=x; //生成新结点
    p->next=q->next; //新结点链域指向*q的后继结点
    q->next=p; //修改*q的链域
    }
    }

     

     顺序存储的插入i是先将插入后面的往后移动插入i-1个位置,空出插入的地方在进行插入

    链式存储:插入结点d,先将d的尾结点连接到b的首结点,接着d的首结点连接a的尾结点,放弃a到b之间的连接

    顺序存储:删除

    1 void DeleteSeqList(SeqList L,int i) {
    2 //删除线性表L中的第i个数据结点
    3 if(i<1 || i>L.length) //检查位置是否合法
    4 exit(“非法位置”);
    5 for(j=i;j<L.length;j ++) //第i个元素的下标为i-1
    6 L.data[j-1]=L.data[j]; //依次左移
    7 L.length--; //表长度减1
    8 }

    链式存储:删除

    void DeleteLinklist(LinkList head, int i)
    //删除表head的第i个结点
    {
    Node *q;
    if(i==1) q=head;
    else q=GetLinklist(head, i-1); //先找待删结点的直接前驱
    if(q !== NULL && q->next != NULL) //若直接前驱存在且待删结点存在
    {
    p=q->next; //p指向待删结点
    q->next=p->next; //移出待删结点
    free(p); //释放已移出结点p的空间
    }
    else exit (“找不到要删除的结点”); //结点不存在
    }

    数据存储:定位

    int LocateSeqlist(SeqList L, DataType x)
    {
    int i=0;
    while ((i<L. length) && (L.data[i]!=x) ) //在顺序表中查找值为 x 的结点
    i++;
    if(i<L.length) return i+1; //若找到值为x的元素,返回元素的序号
    else return 0; //未查找到值为x的元素,返回0
    }
    //顺序表的求表长操作,直接输出L.length即可

    链式存储:定位

    int LocateLinklist (LinkList head ,Data Type x){
    //求表head中第一个值等于x的结点的序号,若不存在这种结点,返回结果为0
    Node *p=head;//p是工作指针
    p=p->next;//初始时P指向首结点
    int i=0;//i代表 结点的序号,这里初值为
    while(p!=null&&p->data!=x){//访问链表
    i++;
    p=p->next;
    }
    if(p!=null)
    return i+1;
    else return 0;}
  • 相关阅读:
    函数是什么?
    设置mac笔记本为固定ip
    JMeter-充值-生成随机数
    JMeter_方案上架,遇到的问题及解决
    做有态度的测试做
    JMeter-标的上架调整与完成
    上标-担保机构
    JMeter已传值但是提示为空
    JMeter上架标的(yyb-csg)
    JMeter中的正则表达式的匹配
  • 原文地址:https://www.cnblogs.com/X404/p/12061462.html
Copyright © 2011-2022 走看看