数据结构定义

 

1.线性表
 顺序存储的结构类型:

 typedef struct {
  ElemType data[MaxSize];
  int length;
 }
 链式存储的结构类型:
 单链表:
  typedef struct Node {
   ElemType data;
   struct Node * next;
  }LinkList;//头结点类型也是一样
 双链表:
  typedef struct Node {
   ElemType data;
   struct Node * prior;
   struct Node * next;
  }DLinkList;//头结点类型也是一样
 循环单链表和循环双链表:基本与单链表和双链表相同,循环单链表中
  表尾的next指针指向了头结点,循环双链表中表尾的指针指向了头结点,
  头结点的prior指针指向了尾结点

2.栈:先进后出
 顺序存储的结构类型:

 typedef struct {
  ElemType data[MaxSize];
  int top;//栈顶指针,初始为-1,为-1表示栈空,为MaxSize - 1表示栈满
 }SqStack;
 链式存储的结构类型:
 typedef struct Node {
  ElemType data;
  struct Node * next;
 }LinkStack;//创建头结点,头结点的next指向栈顶元素,也就是进栈的时候使用头插法进栈

3.队列:先进先出,一端插入,一端删除
 顺序结构类型的定义:rear ....front//环形队列

typedef struct {
  ElemType data[MaxSize];
  int front,rear;//front队首,rear队尾,初始时都为0,后面需要循环进1, front=(front + 1) % MaxSize
          //rear负责入队,并指向刚入队的元素,front负责出队,并指向队首元素的前一个单元,空单元
 }SqQueue;//判断队空的条件,front == rear
      //判断队满的条件,(rear + 1) % MaxSize == front;
      //入队:rear = (rear + 1) % MaxSize;data[rear] = e;
      //出队:front = (front + 1) % MaxSize;e = data[front];
 链式存储的结构类型:
  数据结点类型:
 typedef struct Node {
   ElemType data;
   struct Node * next;
  }QNode;
  链队结点类型:
  typedef struct {
   QNode * front;//队首指针,假如队列不空,则指向队首元素
   QNode * rear;//队尾指针,假如队列不空,则指向队尾元素
  }LinkQueue;
   入队:(无需判断队满)rear->next = (QNode *) malloc(sizeof(QNode));
   出队:(判断空)front = front -> next ->next;
   
4.串:
 顺序存储结构:
 typedef struct {
  char data[MaxSize];
  int length;
 }
 链式存储结构:
 typedef struct Node{
  char data;
  struct Node * next;
 }LingString;//单链表
5.数组:
 稀疏矩阵的三元组定义:
  元素类型:
 typedef struct {
   int r;
   int c;
   ElemType d;
  }TupNode;
  顺序表定义:
  typedef struct {
   int rows;//稀疏矩阵的行
   int cols;//稀疏矩阵的列
   TupNode dat[MaxSize];//稀疏矩阵的非零元个数
  }TSMAtrix;
  
 稀疏矩阵的十字链表定义:
 typedef struct mtxn {
  int row;//链表头结点存储的是稀疏矩阵的行数
  int col;//链表头结点存储的是稀疏矩阵的列数
  struct mtxn * right,* down;
  union {
   ElemType value;//元素结点
   struct mtxn * link;//链表头结点,行头结点,列头结点
  }tag;
 }MatNode;

 广义表:

typedef struct lnode {
  int tag;
  union {
   ElemType data;
   struct lnode *sublist;//子表
  }
  struct * lnode;//指向下一个元素,可以是单个的原子也可能是子表
 }GLNode;
6.树:逻辑结构属于非线性结构
 双亲存储结构:
 typedef struct {
  ElemType data;
  int parent;
 }PTree[MaxSize];
 孩子链存储结构:
 typedef struct node {
  ElemType data;
  struct node *sons[MaxSons];//一维指针数组,存储每个孩子结点的指针
 }TSonNode;
 孩子兄弟链存储结构:
 typdedef struct tnode {
  ElemType data;
  struct tnode *hp;//指向兄弟
  struct tnode *vp;//指向孩子
 }TSBNode;  

7.二叉树:与度为2的数区分。
 链式存储结构:

 typdedef struct tnode {
  ElemType data;
  struct tnode *hp;//指向兄弟
  struct tnode *vp;//指向孩子
 }TSBNode;  


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值