数据结构和算法 C/C++ Java 和 C# 版 - (1)线性表 精准表述

学习和总结下数据结构和算法吧,不知道下一份工作会是什么作为主要的语言,就同一思想写成不同的主流语言版本吧。暂时定为 C/C++ Java 和 C#版的吧。

数据结构 作为开始吧,就是想到的就说说,别太认真哈。先总结下基础知识,然后写写关键数据结构的代码。最后写写实践中的使用。

线性表 精准表述

线性表: 按照字面理解,线型的呗!对吗? 看看英文 Linear List,好像是那么回事儿。还是先说说什么是线性吧。数学中的线性好象是 ai*xi = bi (i=1,2,...,n), 那么x1, x2,...,xn 是线性关系。注意不是平方或是多次方。在线性表里的线性好像没有那么精确,我就理解为能够表达为 a1,a2,...,an 形式的一种数据结构吧。

有了这个明确的概念和清晰的理解,玩起线性表就容易的多了。

1. 顺序表:我的理解就是可以映射到 a1,a2,...,an ; 并且内存是连续分配的。真谛就是顺序存储(指的是内存哟)。就以数组为代表吧。不展开了。

2. 链表:   我的理解就是可以映射到 a1,a2,...,an ; 并且内存是不连续分配的 (或者说 “链” 上的)。真谛就是链式存储。

链表有分为很多种类:

(1)比如单链表:就是一个链上的,或者说单一方向的。

         下面又可以细分成(a)动态单链表-- 和(b)静态单链表

        (a)动态单链表: 一个数据结构,里面有指向该自身结构的指针 比如 struct a { int data, struct a *next }。 以后会主要讨论这个。

        (b)静态单链表: 一个数据结构,实现上常常是一个大大的数组。 数组中的元素 是一个类似 struct b{ int data, int cursor} ,主要的操作是对cursor进行的。

                                   一般大家对这个不是很熟悉,就给出一个抛砖引玉的例子如下:

                                   第零步:比如现在已经有 k (3)个元素,要插入1个新的元素在第m (2) 位置(索引是 m-1  (2-1=1)), (没有给出初始化部分,索引检查等)

                                   第一步:正常按顺序放入数组数据到数组的第k+1个位置                 s[k].data = your data;    // s[3].data = your data; 

                                   第二步:将该新元素的cursor 值 赋值为m(索引1 的下一个位置) s[k].cursor=  m;              // s[3].cursor=  2;

                                   第三步:将该新元素的位置值 赋值给要插入的位置的cursor            s[m-1].cursor=  k;           // s[1].cursor = 3;

(2)双链表:       就是两个链上的,或者说双方向的。在结构体中多加一个指向该自身结构的指针:比如叫 *pre; 静态的情况比如叫 cursor_pre

(3)循环链表:      就是研着链能走一圈,故名循环的。当然可以是单向循环,也可以是双向循环。

所有这些概念要记其实质,就万变不离其中了。

接下来我会说说其他的概念,比如队列 堆栈和广义表。看下文吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值