c语言表示的数据结构的存储表示

本文介绍了多种数据结构的存储表示方法,包括线性表的动态分配顺序存储、单链表存储结构,栈、队列的不同存储形式,以及数组、广义表、二叉树和一般树的存储表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、---------线性表的动态分配的顺序存储结构--------

  #define LIST_INTI_SIZE 100 //线性表存储空间的初始配置

  #difine LISTINCREMENT 10 //线性表存储空间的分配增量

  typedef struct {

    EleType *elem;  //存储空间基址

    int length;    //当前长度

    int listsize;     //当前分配的存储容量(以(sizeof(ElemType)为单位)

  }Sqlist;

2 --------------------线性表的单链表存储结构-----------------------

  typedef struct LNode{

  ElemType data;

  struct LNode *next;    //指向下一个节点的指针

  }LNode ,*LinkList;

 

3.---------------------栈的存储表示--------------------

  typedef struct{

    ElemType *base;

    ElemType *top;

    int stacksize;

  }Sqstack;

4.-----------------------单链队列-队列的链式存储结构-----------------

typedef struct QNode{

  ElemType  data;

  struct QNode *next;

}QNode, *QueuePtr;

typedef struct {

  QueuePtr front;    //队头指针

  QueuePtr rear;  //队尾指针  这里rear之所以不用加*,是因为QueuePtr就是指向               //QNode 的指针

}LinkQueue;

 

5---------------数组的顺序存储表示----------------------

#include<stdarg.h> //标准头文件,提供宏va_start,va_arg,va_end,用于存取变长参数表

#define MAX_ARRAY_DIM 8  //假设数组的最大维数为8

typedef struct{

  ElemType *base;    //数组元素基址,由InitArray分配

  int dim;        //数组维数

  int *bounds;     //数组维界基址 

  int * constants;    //数组映像函数常量基址,忧IntiArray分配

}Array;

 

6.---------------广义表头尾链表存储表示--------------------

 typedef enum {ATOM,LIST} ElemTag; //ATOM ==0 原子  LIST == 1 子表

 typedef struct GLNode{

  ElemTag tag;

  union {

  AtomType atom ; //原子节点和表结点的联合部分

  struct {struct GLNode *hp,*tp;}ptr

};

}*GList;

 

7.--------------二叉树的顺序存储表示---------------

#define  MAX_TREE_SIZE 100

typedef TElemType SqBiTree[MAX_TREE_SIZE];  //0号单元存储根节点

SqBiTree bt;

 

---------------二叉树的链表存储表示------------------

typedef struct BiTNode{

  ElemType data;

  struct BiTNode *lchild,*rchild; //左右孩子指针

}BiTNode, *BiTree;

 

8.=================树的存储表示============

  1)、双亲表示法

  #define MAX_TREE_SIZE  100

  typedef struct PTNode{

    ElemType data;

    int parent; //双亲位置域

  }    

  typedef struct{

    PTNode nodes[MAX_TREE_SIZE];

    int length;  //结点数

  }PTree;

  2).孩子表示法------树的孩子链表存储表示----------

  typedef struct CTNode{

    int   child;

    struct CTNode *next;

  } *childPtr;

  typedef struct {

    ElemType data;

    ChildPtr firstchild; //孩子链表头指针

  }CTBox;

  typedef struct{

    CTBox nodes[MAX_TREE_SIZE];

    int n,r;  //结点数和根的位置;

  }

  //这里的CTBox和ChildPtr是两个不同的数据 ,CTBox表示的是头结点,

  //而ChildPtr是指向孩子结点的指针。CTNode是头结点指向的孩子结点的表示形式

 

3)、---------------树的二叉链表(孩子-兄弟)表示法

typedef struct CSNode{

  ElemType data;

  struct CSNode *fristchild, *nextsibling;  // fristchild 指向的是第一个孩子,        //nextsibling指向的是第一个兄弟结点

}CSNode, *CSTree;

 

//明天继续。。。。。。

 

  

转载于:https://www.cnblogs.com/lhj9127/p/convey.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值