定义:
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素之间的关系,称之为“结构”,有根据数据元素之间关系的不同特性,通常就分成了下面的4中基本的结构:
集合:
线性结构:
树:
图状或者网状结构:
先简单通过4张图片来了解一下,后面的文章会一一详细的讲解
数据元素之中的结构有两种不同的表示方法:顺序和非顺序 因此计算机中有两种不同的存储结构:顺序存储结构和链式存储结构
接下来说说我们要封装的基结构,关于所说的基结构可以这样理解,为所有数据结构的共同特性,那么我们要封装什么呢?
数据对象
数据之间的关系
基本的操作(初始化,插入,删除,获取所有值,获取值等基本的一些操作)
接下来就开始我们的封装
C语言
c封装起来确实比较麻烦,C语言是面向过程的语言,但是我们可以用结构体模拟面向对象来对其进行封装
代码如下:
#include<stdio.h>
#define BaseStruct LinkList//标注BaseStruct现在是什么类型 比如说现在是列表 对列表进行操作
typedef int BaseType;//定义baseStruct的基本类型
typedef struct node{
BaseType data;
struct node *next;
} Node;//链式存储需要用到这样的一个节点结构
typedef struct basestruct{
BaseType *header;//不管是什么存储结构都会有一个头,通过开头地址就能找到下一个元素
void (*initData)();//初始化数据
void (*insert)();//插入数据
void (*removeh)();//删除值 remove有函数用了这个名字所以换成removeh
void (*printbs)();//打印bs
}BaseStruct;
void initData(BaseStruct bs){}
void insert(BaseStruct bs){}
void removeh(BaseStruct bs){}
void printbs(BaseStruct bs){}
//这里先做个简单的演示,还有其他的一些共有的方法
void main(){
BaseStruct a;
a.initData=initData;
a.insert=insert;
a.removeh=removeh;
a.printbs=printbs;
a.initData();
a.insert();
a.removeh();
a.printbs();
//getchar();
}
PHP
php实现起来就比较简单了,通过面向对象的思考方法可以让封装变得很简单
<?php
//基接口
interface BaseStructImpl{
//public function initData();关于php可以不用进行initData 因为php为自动为你的变量分配地址
public function insert();
public function remove();
public function print_bs();//打印所有的数据
}
//顺序存储结构
class BaseStruct implements BaseStructImpl{
private $data;//顺序存储结构可以通过数组来实现存储
public function __construct($d){
//可以在这里进行初始化数据
$this->data=$d;
}
public function insert(){}
public function remove(){}
public function print_bs(){}//
}
//模拟链式存储结构
class Node{
public $data;
public $next=null;
}
class LinkedBaseStruct implements BaseStructImpl{
private $header;//顺序存储结构可以通过数组来实现存储
public function __construct(){
//可以在这里进行初始化数据
$head=new Node();
$head->data="头节点的值";
//$head->next=new Node();
}
public function add(){}
public function insert(){}
public function remove(){}
public function print_bs(){}
}
?>
JAVA
java跟php的写法差不多 我就不多说什么了
interface BaseStructImpl{
public void insert();
public void remove();
public void print_bs();
}
//顺序存储结构
class BaseStruct implements BaseStructImpl{
public int[] data;//10个长度大小的int型顺序型存储结构
public BaseStruct(){
this.data=new int[10];
};
public void insert(){};
public void remove(){};
public void print_bs(){};
}
//链式存储结构
class Node{
public int data;
public Node next=null;
}
class LinkedBaseStruct implements BaseStructImpl{
public Node head;
public LinkedBaseStruct(){
this.head=new Node();
}
public void insert(){};
public void remove(){};
public void print_bs(){};
}
Python
python没有接口 但是我们可以通过继承类来实现
class BaseStructImpl:
def insert(self):
pass
def remove(self):
pass
def print_bs(self):
pass
#顺序存储结构
class BaseStruct(BaseStructImpl):
def __init__(self,d):
self.data=d#顺序存储简单
pass
def insert(self):
pass
def remove(self):
pass
def print_bs(self):
pass
#链式存储结构
class Node:
def __init__(self,d):
self.data=d
self.next=None;
class LinkedBaseStruct(BaseStructImpl):
def __init__(self):
self.head=Node(1)
pass
def insert(self):
pass
def remove(self):
pass
def print_bs(self):
pass
node.js
//在node.js中引进了面向对象的方法
class BaseStructImpl{
insert(){};
remove(){};
print_bs(){};
}
//顺序存储结构
class BaseStruct extends BaseStructImpl{
constructor(d){
this.data=d;
};
insert(){};
remove(){};
print_bs(){};
}
//链式存储结构
class Node{
//注意点:class定义的成员变量只能在constructor里面定义和初始化
//这一点和function不同
constructor(d){
this.next=null;
this.data=d;
}
}
class LinkedBaseStruct extends BaseStructImpl{
constructor(d){
this.head=new Node(1);
}
insert(){};
remove(){};
print_bs(){};
}
总结
这篇文章是我在学习数据结构的时候写的一篇学习笔记,如果文章中有什么写的不对的地方请大神进行指点。谢谢。下一篇文章将继续通过这种方式来继续学习数据结构。
参考书籍
严蔚敏教授的《数据结构》