顺序表的简单实现

  1 import java.util.Scanner;
  2     class DATA{ //模拟一个班级的学生记录
  3         String key;
  4         String name;
  5         int age;
  6     }
  7
  8     class SLType{
  9
 10         static final int MAXLEN = 100;
 11         DATA[] ListData = new DATA[MAXLEN+1];
 12         int ListLen;            //顺序表已存结点的数量
 13
 14
 15     void SLInit(SLType sl){
 16         sl.ListLen = 0;
 17     }
 18
 19
 20     int SLLength(SLType sl){
 21         return (sl.ListLen);
 22     }
 23
 24     //插入节点
 25     int SLInsert(SLType SL,int n , DATA data){
 26         int i ;
 27         if(SL.ListLen>=MAXLEN){
 28             System.out.println("顺序表已满,不能插入节点");
 29             return 0;
 30         }
 31
 32         if(n<1 || n>SL.ListLen-1){
 33             System.out.println("插入序号有误,不能插入节点");
 34             return 0;
 35         }
 36         //将顺序表中的数据向后移动
 37         for(i = SL.ListLen; i >=n ; i--){
 38             SL.ListData[i+1] = SL.ListData[i];
 39         }
 40         SL.ListData[n] = data;
 41         SL.ListLen++;
 42         return 1;
 43
 44     }
 45
 46
 47     //追加节点
 48     int SLAdd(SLType SL,DATA data){
 49         if(SL.ListLen>=MAXLEN){
 50             System.out.println("顺序表已满,不能插入节点");
 51             return 0;
 52         }
 53         SL.ListData[++SL.ListLen]=data;
 54         return 1;
 55     }
 56
 57     //删除节点
 58     int SLDelete(SLType SL,int n ){
 59         int i;
 60         if(n<1||n>SL.ListLen+1){
 61             System.out.println("序号输入有误,不能插入节点");
 62             return 0;
 63         }
 64         //往前挪
 65         for(i = n ; i<SL.ListLen;i++){
 66             SL.ListData[i] = SL.ListData[i+1];
 67         }
 68         SL.ListLen--;
 69         return 1;
 70     }
 71
 72     //查找节点
 73     DATA SLFindByNum(SLType SL,int n){
 74         if(n<1||n>SL.ListLen+1){
 75             System.out.println("序号输入有误,不能插入节点");
 76             return null;
 77         }
 78         return SL.ListData[n];
 79     }
 80
 81     //按照关键字查找节点
 82     int SLFindByCont(SLType SL,String key){
 83         int i;
 84         for(i = 1; i <= SL.ListLen ; i++){
 85             if(SL.ListData[i].key.compareTo(key)==0){
 86                 return i;
 87             }
 88         }
 89         return 0;
 90     }
 91
 92     //显示所有节点
 93     int SLAll(SLType SL){
 94         int i;
 95         for(i = 1; i <=SL.ListLen ; i++){
 96             System.out.println(SL.ListData[i].key+"#"+SL.ListData[i].name+"#"+SL.ListData[i].age);
 97         }
 98         return 0;
 99     }
100
101     }
102
103     public class SequentialList {
104         public static void main(String[] args) {
105             int i;
106             SLType SL=new SLType();                 //定义顺序表变量
107 //          DATA data=new DATA();                   //定义结点保存数据类型变量
108             DATA pdata;             //定义结点保存指针变量
109             String key;                 //保存关键字
110
111             System.out.print("顺序表操作演示!\n");
112
113             SL.SLInit(SL);                  //初始化顺序表
114             System.out.print("初始化顺序表完成!\n");
115
116             Scanner input=new Scanner(System.in);
117
118             do
119             {                           //循环添加结点数据
120                 System.out.print("输入添加的结点(学号 姓名 年龄):");
121                 DATA data=new DATA();
122                 data.key=input.next();
123                 data.name=input.next();
124                 data.age=input.nextInt();
125
126                 if(data.age!=0)               //若年龄不为0
127                 {
128                     if(SL.SLAdd(SL,data)==0)   //若添加结点失败
129                     {
130                         break;            //退出死循环
131                     }
132                 }
133                else                 //若年龄为0
134                {
135                     break;                  //退出死循环
136                }
137             }while(true);
138             System.out.print("\n顺序表中的结点顺序为:\n");
139             SL.SLAll(SL);                  //显示所有结点数据
140
141
142             System.out.print("\n要取出结点的序号:");
143             i=input.nextInt();               //输入结占点序号
144             pdata=SL.SLFindByNum(SL,i);  //按序号查找结点
145             if(pdata!=null)                 //若返回的结点指针不为NULL
146             {
147                 System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);
148             }
149             System.out.print("\n要查找结点的关键字:");
150             key=input.next();           //输入关键字
151             i=SL.SLFindByCont(SL,key);     //按关键字查找 ,返回结点序号
152             pdata=SL.SLFindByNum(SL,i);   //按序号查询,返回结点指针
153             if(pdata!=null)                     //若结点指针不为NULL
154             {
155                 System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);
156             }
157         }
158 }
时间: 2024-10-09 07:32:59

顺序表的简单实现的相关文章

C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. 1 #pragma once 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 using namespace std; 6 7 template <class T> 8 class Vector 9 { 10 publ

经典数据结构实现与分析:顺序表,单链表,

本博客在在这里重新总结了一下,当前常用的经典数据结构:这里只针对链表,顺序表,简单树和图进行总结:具体实现请参考:https://github.com/yaowenxu/codes/tree/master/数据结构; 本文章,主要讨论数据结构的性质:以及对这些数据结构的性质:主要是用来知识整理与复习: 顺序表:顺序表是指,将元素顺序地存放在一块连续的内存中:元素间的顺序关系由他们的存储顺序自然表示:c++声明一个数组:int a[10]; 即构建了10个int内存大小(40bytes)的顺序表:

一个简单的顺序表基础操作示例

最近学计算机软件基础,学到了线性表.下面就将线性表中最简单的顺序表的一个简单示例贴出,方便大家探讨.(以及后面对函数传参的一个小分析,其实这才是重点) 1 ////需求分析 2 //1.线性表递增有序,删除重复元素 3 //2.线性表逆置 4 //3.寻求最大值 5 6 #include<stdio.h> 7 8 typedef int ElementType; 9 typedef struct _struct 10 { 11 ElementType SequenceList[100]; 12

简单顺序表的插入,删除,指定位置,指定元素的插入删除操作

头文件 SeqList.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<stdio.h> #include<string.h> #include<assert.h> #define MAX_SIZE 10 typedef int DataType; typedef unsigned int size_t; typedef struct SeqList { DataType array[MAX_SIZE]; s

Java数据结构(线性表--&gt;顺序表简单实现)

线性表是一种可以在任意位置插入和删除元素,由n个同类型元素组成的线性结构.主要包括顺序表,单链表,循环单链表,双向链表和仿真链表.应用比较广泛的是顺序表和单链表. 2 下面是线性表的接口,主要操作包括插入元素,删除元素,取得元素,得到线性表元素个数,判断线性表是否为空. 3 package com.linear.table; 4 /** 5 * 操作顺序表的接口方法 6 * @author Mature 7 * 8 */ 9 public interface MatureListInterfac

顺序表查找和有序表查找

查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释. 1 #include <iostream> 2 using namespace std; 3 4 //顺序表查找(线性查找.静态表查找) 时间复杂度为O(n) 5 int Seq_Search(int *s,int n,int key) 6 { 7 s[0] = key; //设置了一个哨兵,避免了每次比较一次过后都要判断查找位置是否越界 8 int i = n; 9 while

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

稀疏矩阵的三元组顺序表的C语言实现

对于没有排序功能的集合来说,都可以使用java.util.Collections.sort()方法进行排序,它除了集合对象以外,还需要提供一个比较器.如果列表中的元素全部都是相同的类型,并且这个类实现了Comparable接口,就可以简单的调用Collections.sort()方法,如果这个类没有实现comparable接口,那么可以创建一个比较器传递一个Comparator实例作为Sort()的第二个参数进行排序,另外,如果不想使用默认的分类顺序进行排序,同样也可以传递一个Comparato

1.2顺序表

计算机内部存储一张线性表(线性结构的数表),最简单方便的方法就是用一组连续地址的内存单元来存储整张线性表. 顺序表的特征: 1)有一个唯一的表名来标识该顺序表: 2)内存单元连续存储,也就是说,一张顺序表要占据一块连续的内存空间: 3)数据顺序存放,元素之间有先后关系 注意:数组本身就是一张顺序表. 顺序表的定义: 两种定义顺序表的方法:静态定义一张顺序表:动态生成一张顺序表. 静态地定义一张顺序表的方法与定义一个数组的方法类似. 向顺序表中插入.删除元素. ------------------