
结构(编程术语)
在计算机科学中,在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关係,这种数据元素相互之间的关係称为结构(structure)。根据数据元素之间关係的不同特性,通常分为4类基本结构:线性结构、树形结构、集合、图状结构或网状结构。
基本介绍
- 中文名:结构
- 外文名:structure
- 学科:计算机科学
- 定义:元素之间的关係
- 基本结构:集合、线性结构、网状结构
- 实现:自己实现、调用函式馆
定义
在计算机科学中,在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关係,这种数据元素相互之间的关係称为结构(structure)。根据数据元素之间关係的不同特性,通常分为4类基本结构:线性结构、树形结构、集合、图状结构或网状结构。
基本结构
在计算机科学中,根据数据元素之间关係的不同特性,通常分为4类基本结构。
集合
集合是指结构中的数据元素之间除了“同属一个集合”的关係外,别无其他关係。例如这些数据项的类型是相同的。
线性结构
线性结构是指结构中的数据元素之间存在一个对一个的关係。常用的线性结构有:线性表,栈,伫列,双伫列,数组,串。
树形结构
树形结构是指结构中的数据元素之间存在一个对多个的关係。在树形结构中,树根结点没有前驱结点,其余每个结点有且只有一个前驱结点。叶子结点没有后续结点,其余每个结点的后续节点数可以是一个也可以是多个。经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树。 左子树和右子树又有自己的子树。
图状结构或网状结构
图状结构或网状结构是指结构中的数据元素之间存在多个对多个关係。网状结构(reticular formation)分为全连线网状和不完全连线网状两种形式。全连线网状中,每一个节点和网中其它节点均有链路连线。不完全连线网中,两节点之间不一定有直接链路连线,它们之间的通信,依靠其它节点转接。这种网路的优点是节点间路径多,碰撞和阻塞可大大减少,局部的故障不会影响整个网路的正常工作,可靠性高;网路扩充和主机入网比较灵活、简单。但这种网路关係複杂,建网不易,网路控制机制複杂。广域网中一般用不完全连线网状结构。
实现
在面向对象的程式语言和面向过程的程式语言中,我们实现结构选择有所不同,一种是根据我们选择自定义,一种是调用系统包。
C
在C语言中,为了实现我想要的结构,可以自定义定义结构体类型,将多个相关的变数包装成为一个整体使用。在结构体中的成员,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函式。在面向对象的程式设计中,对象具有状态(属性)和行为,状态保存在成员变数中,行为通过成员方法(函式)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,对结构体进行了扩展,C++的结构体可以包含函式。
C++
#include<cstdlib>#include<iostream>//定义结构体structpoint{//包含两个变数成员intx;inty;};usingnamespacestd;int main(intargc,char*argv[]){pointpt;pt.x=1;pt.y=2;cout<<pt.x<<endl<<pt.y<<endl;returnEXIT_SUCCESS;}
在表达式中,可以通过下列形式引用某个特定结构的成员:
结构名.成员
其中的机构成员运算符“.”将结构名和成员名连线起来。
结构还可以嵌套。我们可以用对角线上的两点来定义矩形,相应的结构定义如下:
struct rect{
struct point pt1;
struct point pt2;
};
结构rect包含两个point 类型的成员。如果按照下列方式声明screen变数:
struct rect screen ;
则可以用语句:
引用screen 的成员pt1的x坐标。
C#
声明结构的语法和声明类的语法相似
结构是值的类型 所有的值类型都一样 结构类型的变数含有自己的数据 因此
- 结构类型的变数不能为null
- 两个结构变数不能引用同一对象
struct StructName
{
Memberdeclarations
}
例如 下面的代码生命了一个名称为Point的结构 他有两个共有栏位 名称为X和Y 在Main中 声明了3个Point类型的变数 并对他们赋值 列印。
struct Point
{
public int X;
public int Y;
}
class Program
{
static void Main()
{
Point first,second,third;
first.X=10;first.Y=10;
second.X=20;second.Y=20;
third.X = first.X + second.X;
third.Y = first.Y+ second,Y;
Console.WriteLine("first: {0},{1}",first.X,first.Y);
Console.WriteLine("second: {0},{1}",second.X,second.Y);
Console.WriteLine("third: {0},{1}",third.X,third,Y);
}
}
在C++和C#中也有已经封装好的ji基本结构包可以直接调用,如Set。