数据结构与算法笔记5の各类数据的存储结构总结


声明:本帖由《大话数据结构》源代码整理而成

1. 线性表

宏定义:

#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */

1.1 线性表顺序存储

静态分配数组长度:

typedef struct
{
	ElemType data[MAXSIZE];        /* 数组,存储数据元素 */
	int length;                    /* 线性表当前长度 */
}SqList;

动态分配数组长度:

typedef struct
{
	ElemType * data;        	/* 传入数组首地址 */
	int length;                 /* 线性表当前长度 */
}SqList;

1.2 线性表链式存储

typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;
typedef struct Node *LinkList; /* 定义LinkList */

1.3 线性表静态存储

用数组来模拟指针,妙呀!

/* 线性表的静态链表存储结构 */
typedef struct 
{
    ElemType data;
    int cur;  /* 游标(Cursor) ,为0时表示无指向 */
} Component,StaticLinkList[MAXSIZE];

2. 栈与队列

2.1 顺序栈

/* 顺序栈结构 */
typedef struct
{
        SElemType data[MAXSIZE];
        int top; /* 用于栈顶指针 */
}SqStack;

2.2 链栈

typedef int SElemType; /* QElemType类型根据实际情况而定,这里假设为int */
/* 链栈结构 */
typedef struct StackNode		 /* 结点结构,就是普通的线性表链式存储结构 */
{
        SElemType data;
        struct StackNode *next;
}StackNode,*LinkStackPtr;


typedef struct					/* 栈的链表结构 */
{
        LinkStackPtr top;
        int count;				/* 当前栈中成员个数 */
}LinkStack;

2.3 顺序队列

typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */
/* 循环队列的顺序存储结构 */
typedef struct
{
	QElemType data[MAXSIZE];
	int front;    	/* 头指针 */
	int rear;		/* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
}SqQueue;

2.4 链队列

typedef struct QNode	/* 结点结构,就是普通的线性表链式存储结构 */
{
   QElemType data;
   struct QNode *next;
}QNode,*QueuePtr;

typedef struct			/* 队列的链表结构 */
{
   QueuePtr front,rear; /* 队头、队尾指针 */
}LinkQueue;

3. 树

宏定义:

#define MAXSIZE 100 		/* 存储空间初始分配量 */
#define MAX_TREE_SIZE 100 	/* 二叉树的最大结点数 */

typedef int Status;			/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int TElemType;  	/* 树结点的数据类型,目前暂定为整型 */
typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0号单元存储根结点  */

3.1 二叉树顺序存储

typedef struct
{
	int level,order; /* 结点的层,本层序号(按满二叉树计算) */
}Position;

3.2 二叉树链式存储

typedef struct BiTNode  			/* 结点结构 */
{
   TElemType data;					/* 结点数据 */
   struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;

3.3 线索二叉树

typedef char TElemType;
typedef enum {Link,Thread} PointerTag;	/* Link==0表示指向左右孩子指针, */
										/* Thread==1表示指向前驱或后继的线索 */
typedef  struct BiThrNode				/* 二叉线索存储结点结构 */
{
	TElemType data;						/* 结点数据 */
	struct BiThrNode *lchild, *rchild;	/* 左右孩子指针 */
	PointerTag LTag;
	PointerTag RTag;					/* 左右标志 */
} BiThrNode, *BiThrTree;

4. 图

宏定义

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100 /* 最大顶点数,应由用户定义 */
#define INFINITY 65535

typedef int Status;	/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef char VertexType; /* 顶点类型应由用户定义  */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */

4.1 邻接矩阵

typedef struct
{
	VertexType vexs[MAXVEX];		/* 顶点表 */
	EdgeType arc[MAXVEX][MAXVEX];	/* 邻接矩阵,可看作边表 */
	int numNodes, numEdges;			/* 图中当前的顶点数和边数  */
}MGraph;

4.2 邻接表

typedef struct EdgeNode 	/* 边表结点  */
{
	int adjvex;    			/* 邻接点域,存储该顶点对应的下标 */
	EdgeType info;			/* 用于存储权值,对于非网图可以不需要 */
	struct EdgeNode *next; 	/* 链域,指向下一个邻接点 */
}EdgeNode;

typedef struct VertexNode 	/* 顶点表结点 */
{
	VertexType data; 		/* 顶点域,存储顶点信息 */
	EdgeNode *firstedge;	/* 边表头指针 */
}VertexNode, AdjList[MAXVEX];

typedef struct
{
	AdjList adjList; 
	int numNodes,numEdges; 	/* 图中当前顶点数和边数 */
}GraphAdjList;

5. 散列表

typedef struct
{
   int *elem; 		/* 数据元素存储基址,动态分配数组 */
   int count;		/* 当前数据元素个数 */
}HashTable;

6. 排序

typedef struct
{
	int r[MAXSIZE+1];	/* 用于存储要排序数组,r[0]用作哨兵或临时变量 */
	int length;			/* 用于记录顺序表的长度 */
}SqList;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值