数据结构--顺序线性表

using System;
using System.Collections.Generic;
using System.Text;

namespace List
{
    struct orderList
    {
       
       public  int[] data;
       public int len ;
    }
    class OrderList
    {
       private orderList ol;
        //初始化表
       public  OrderList()
        {
            ol.data = new int[50];
            ol.data[0] = 0;
            ol.data[1] = 1;
            ol.data[2] = 2;
            ol.data[3] = 3;
            ol.len =4;
        }
        //求表长度
        public int Length()
        {
            return ol.len;
        }
        //取表中元素
        public int GetElem(int i)
        {
            return ol.data[i - 1];
        }
        //取元素的前驱
        public int PriorElem(int x)
        {
            int i = 0;
            while (ol.data[i] != x)
            {
                i++;
            }
            int pre_x = ol.data[i - 1];
            return pre_x;
        }
        //取元素的后继
        public int NextElem(int x)
        {
            int i = 0;
            while (ol.data[i] != x)
            {
                i++;
            }
            int next_x = ol.data[i + 1];
            return next_x;
        }
        //定位元素
        public int LocateElem(int x)
        {
            int i = 0;
            while (ol.data[i] != x)
            {
                i++;
                if (i > ol.len)
                {
                    Console.WriteLine("元素在线性表中不存在!");
                    break;
                }
            }
            if (i > ol.len)
            {
                return 0;
            }
            else
                return i + 1;
          
      
        }
        //插入元素
        public bool  ListInsert(int i ,int x)
        {
            int j;
            if (i < 1 || i > ol.len)
            {
                Console.WriteLine("输入有误!");
                return false;
            }
            for (j = ol.len; j >= i; j--)//将序号为i 的节点及之后的元素后移
                ol.data[j] = ol.data[j - 1];
            ol.data[i - 1] = x;
            ol.len++;
            Console.WriteLine("插入成功!");
            return true;
        }
        //删除元素
        public bool ListDelete(int i)
        {
            int j;
            if (i < 1 || i > ol.len)
            {
                Console.WriteLine("输入有误!");
                return false;
            }
            for (j = i; j < ol.len; j++)//将序号为i 的节点之后的元素前移
            {
                ol.data[j - 1] = ol.data[j];
            }
            ol.len--;
            Console.WriteLine("删除成功!");
            return true;
        }
        //输出线性表
        public void PrintList()
        {
           int i;
           for (i = 1; i <= ol.len; i++)
               Console.WriteLine("ol.data[{0}]={1}",i-1,ol.data[i-1]);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
        OrderList OrderListObject = new OrderList();
        Console.WriteLine("线性表的长度是{0}" , OrderListObject.Length());
        Console.WriteLine("取线性表的第1个元素{0}",OrderListObject.GetElem(1));
        Console.WriteLine( OrderListObject.PriorElem(2));
        Console.WriteLine(OrderListObject.NextElem(2));
        Console.WriteLine(OrderListObject.ListInsert(1, 5));//插入元素
        OrderListObject.PrintList();//输出元素
        Console.WriteLine(OrderListObject.ListDelete(1));//删除元素
        OrderListObject.PrintList();//输出元素
        Console.ReadKey();
        }
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种常见的数据结构,它表示具有相同数据类型的一组元素的有序序列。线性表中的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性表可以用顺序存储结构或链式存储结构实现。 在顺序存储结构中,线性表的元素按照顺序存储在连续的内存空间中,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构中,线性表每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存中,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性表常见的操作包括插入、删除、查找、获取长度等。其中插入和删除操作需要注意保持线性表顺序关系。 常见的线性表有数组、链表、栈和队列。数组是最简单的线性表,通过下标可以直接访问元素;链表是动态存储结构,插入和删除操作方便,但访问元素需要遍历链表;栈是一种特殊的线性表,只允许在表的一端进行插入和删除操作;队列也是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用中都有各自的应用场景和优缺点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值