zoukankan      html  css  js  c++  java
  • 线性表

    1.线性表是最基本,最简单,也是最常用的一种数据结构,线性表也就是 n 个元素组成的有限序列,有以下几个特征。

       对于一个非空的线性表,其逻辑结构如下。

    • 有一个开始结点a1没有直接前驱,有且仅有一个后继结点a2。
    • 有且仅有一个终结结点an,没有直接后继,有且仅有一个前驱结点a(n-1)。
    • 中间结点ai仅有一个前驱结点a(i-1)仅有一个后继结点a(i+1)。

    2.线性表的运算

    • 初始化。

    构造(InitList)一个空的线性表。

    计算表长。

    也就是(ListLength)计算表中结点个数。

    • 获取结点。

    (GetNode)返回第i个结点的数据,0<=i<n-1。

    • 查找结点

    (LocateNode)

    查找值为x的结点并返回其在表中的位置,如果未找到则返回相应标志。

    • 插入结点(InsertList)

    在相应位置插入结点,使得相应位置以后的结点位置+1,表的长度+1。

    • 删除结点

    和插入操作相反,在特定位置删除结点,使得结点以后的结点位置-1,表的长度-1。

    3.下面看一下具体实例(java版)

    顺序存储

     1 package neuq.chao;
     2 import java.util.Scanner;
     3 class DATA{                                                //定义一个线性表存储的数据类型。
     4     String name;
     5     int    age;
     6 }
     7 
     8 public class LinerList {
     9     //线性表
    10     static final int SIZE = 10;                            //定义线性表最大长度
    11     
    12     DATA[] lisData  = new DATA[SIZE+1];
    13     int    Lislen;                                         //线性表已有结点长度
    14     void InitList(LinerList l){
    15         l.Lislen = 0;                                    //初始化线性表的长度为0
    16     }
    17     int listLength(LinerList l){
    18                                                         //获取线性表的长度
    19         return l.Lislen;
    20     }
    21     int insertList(LinerList l,int n,DATA data){       //在特定位置插入结点
    22         if(l.Lislen>=SIZE){                            //线性表已满
    23             System.out.print("线性表已满无法插入 
    ");
    24             return 0;                                  //插入失败    
    25         }    
    26         if(n<1&&n>SIZE-1){                            //插入位置错位
    27             System.out.print("插入序号错误: 
    ");
    28         }
    29         for(int i=l.Lislen;i>n;i--){                //n之后的结点依次向后移
    30             l.lisData[i+1] = l.lisData[i];
    31         }
    32         l.lisData[n] = data;
    33         l.Lislen++;
    34         return 1;
    35     }
    36     int DeleteList(LinerList l,int n){
    37         if(n<1&&n>l.Lislen+1){
    38             System.out.print("要删除的结点序号不正确 
    ");
    39             return 0;                                 //删除失败
    40         }
    41         for(int i=n;n<=l.Lislen;i++){
    42             l.lisData[i-1] = l.lisData[i];          //n之后的结点依次向前移动
    43         }
    44         l.Lislen--;
    45         return 1;                                    //删除成功
    46     }
    47  DATA getNode(LinerList l,int n){
    48      if(n<1&&n>l.Lislen){
    49          System.out.print("结点序号错误: 
    ");
    50          return null;                                    //获取结点失败
    51      }
    52      else{
    53          System.out.print("结点数据为: 
    ");
    54          System.out.print(l.lisData[n].name+l.lisData[n].age);            //打印结点数据
    55      }
    56      return l.lisData[n];
    57  }
    58  int findNode(LinerList l,String name){        
    59      int i;//通过name查找结点
    60      for(i=1;i<=l.Lislen;i++){
    61          if(!(l.lisData[i].equals(name))){
    62              return i;                                                    //找到指定结点
    63          }
    64      }
    65      return 0;
    66  }
    67  int showAll(LinerList l){
    68      for(int i=1;i<=l.Lislen;i++){                                        //打印所有结点数据
    69          System.out.printf("(%s,%d)
    ",l.lisData[i].name,l.lisData[i].age);
    70      }
    71      return 0;
    72  }
    73 }
    74 class SList{
    75     public static void main(String args[]){
    76         Scanner input = new Scanner(System.in);
    77         LinerList l = new LinerList();
    78         System.out.print("顺序操作演示 
    ");
    79         l.InitList(l);
    80         System.out.print("初始化成功 
    ");
    81         DATA data = new DATA();
    82         System.out.print("输入要插入数据");
    83         data.name = input.next();
    84         data.age = input.nextInt();
    85         int n    = input.nextInt();
    86         if((l.insertList(l,n,data))!=0){                //插入操作演示
    87             System.out.print("插入成功");
    88         }
    89     }
    90 }
  • 相关阅读:
    OpenCv 人脸识别 基础
    C++ 0x std::async 的应用
    C++ 0x 使用condition_variable 与 Mutex 同步两个线程
    Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数
    C++ 11 中的 Lambda 表达式的使用
    DirectShow 制作在Unity3D中可以设置进度的视频播放插件
    Async/Await 如何通过同步的方式实现异步
    React Native 开源项目汇总
    ES6 Promise的理解与简单实现(链接)
    深刻理解BFC(链接)
  • 原文地址:https://www.cnblogs.com/code-changeworld/p/4361110.html
Copyright © 2011-2022 走看看