数据结构-结构体的声明

数据结构-结构体的声明

http://blog.sina.com.cn/s/blog_627ebfc30100my9c.html

一般来说,知道了各种存储结构的结构体,或者各种算法(其实算法是在各种特定的存储结构下实现)所需的结构体,所以我觉得记住或者牢记各种场合,各种情形下所需要的存储结构的结构体,对算法的创建和表达就会轻松和容易许多。

一、顺序存储

   1、 顺序表

        #define MAXSIZE 100

        typedef int datatype;

        typedef struct

        { datatype a[MAXSIZE];

          int size;

        }sequence_list;

2、栈(顺序栈)

        #define MAXSIZE 100

        typedef int datatype;

        typedef struct

        { datatype a[MAXSIZE];

          int top;

        }sequence_stack;

3、队列(顺序队列,顺序循环队列)

        #define MAXSIZE 100

        typedef int datatype;

        typedef struct

        { datatype a[MAXSIZE];

          int front;

          int rear;

        }sequence_queue;

 其中循环队列判满条件:(rear+1)%MAXSIZE=front;判空条件:rear=front

二、链式存储

   1、 单链表(带头结点的单链表,循环单链表)

        typedef int datatype;

        typedef struct link_node

        { datatype info;

          struct link_node *next;

        }node;

2、双链表

        typedef int datatype;

        typedef struct dlink_node

        { datatype info;

          struct link_node *llink,*rlink;

        }dnode;

3、链式栈

        typedef int datatype;

        typedef struct link_node

        { datatype info;

          struct link_node *next;

        }node;

    node *top;

4、链式队列

        typedef int datatype;

        typedef struct link_node

        { datatype info;

          struct link_node *next;

        }node;

        typedef struct

        { node *front,*rear;

        }queue;

三、字符串

    1、顺序串:模式匹配(朴素的模式匹配算法,KMP算法)

        #define MAXSIZE 100

        typedef struct

        char str[MAXSIZE];

          int length;

        }seqstring;    

    2、链式串

       typedef struct node

        { char data;

          struct node *next;

        }linkstrnode;

      typedef linkstrnode *linkstring;

    3、N维数组:行优先存储,列优先存储

     (三维数组)

     typedef int datatype;

     typdef struct

     { datatype *base;//数组存储区的首地址指针

       int index[3];//存放三维数组各维的长度

       int c[3]; //存放三维数组各维的ci值

     }array;

四、树

1、双亲表示法

        #define MAXSIZE 100

        typedef char datatype;//节点值的类型

        typedef struct node//结点类型

        { datatype data;

          int parent;//结点双亲的下标

        }node;

        typedef struct tree

        {  node treelist[MAXSIZE];//存放结点的数组

           int length,root;//树中实际所含结点的个数,根节点的位置

        }tree;//树的类型

2、孩子表示法(指针方式)

        #define m 3//树的度数

        typedef char datatype;//节点值的类型

        typedef struct node

        { datatype data;

          struct node *child[m];//指向子女的指针数组

        }node,*tree;

        tree *node;

3、孩子表示法(数组方式)

        #define m 3//树的度数

        #define MAXSIZE 20//存放树结点的数组大小

        typedef char datatype;//结点值的类型

        typedef struct node//结点类型

        { datatype data;

          int child[m];

        }treenode;

        treenode tree[MAXSIZE];//存储树结点的数组

        int root;//根节点的下标

        int length;//树中实际所含结点的个数

4、孩子表示法(链式方式)

        #define MAXSIZE 50

        typedef char datatype;//结点值的类型

        typedef struct chnode//孩子结点的类型

        { int child;

          struct chnode *next;

        }chnode,*chpoint;

        typedef struct//树中每个结点的类型

        { datatype data;

          chpoint firstchild;//指向第一个子女结点的指针

        }node;

        typedef struct//树的类型

        { node treelist[MAXSIZE];

          int length,root;//树中实际所含结点的个数,根结点的位置

        }tree;

5、孩子兄弟表示法

        typedef char datatype;//结点值的类型

        typedef struct node//孩子结点的类型

        { datatype data;

          struct node *firstchild,*rightsibling;

        }node,*pnode;

        pnode root;

6、树的括号表示

7、树的层号表示

五、二叉树

1、完全二叉树

        #define MAXSIZE 20

        typedef char datatype;//结点值的类型

        datatype tree[MAXSIZE];

        int n;//树中实际所含结点的个数

2、一般二叉树(顺序存储)

        #define MAXSIZE 20

        typedef char datatype;//结点值的类型

        typedef struct

        { datatype data;

          int lchild,rchild;//存放左,右子女的下标

          int parent;//存放双亲结点的下标(当需要带双亲指示时声明)

        }node;

        node tree[MAXSIZE];

        int n;//树中实际所含结点的个数

        int root;//存放根结点的下标

3、链式存储

        typedef char datatype;//结点值的类型

        typedef struct node

        { datatype data;

          struct node *lchild,*rchild;//存放左,右子女的下标

          int *parent;//指向双亲结点的指针(当需要带双亲指示时声明)

        }bintnode;

        typedef bintnode *bintree;

        bintree root;//指向二叉树根节点的指针

六、图

1、邻接矩阵类型定义

        #define FINITY 5000//用5000表示无穷大

        #define M 20//最大顶点数

        typedef char vertextype;//顶点值的类型

        typedef int edgetype;//权值类型

        typedef struct

        { vertextype vex[M];//顶点信息域

          edgetype deges[M][M];//邻接矩阵

          int n,e;//图中顶点总数,边数

        }Mgraph;

2、邻接表类型定义

        #define M 20//最大顶点数

        typedef char datatype;//顶点信息数据类型

        typedef struct node//边表结点

        { int adjvex;//邻接点

          struct node *next;

        }edgenode;

        typedef struct vnode//头结点类型

        { datatype vertex;//顶点信息

          edgenode *firstedge;//邻接链表 头指针

        }vertexnode;

        typedef struct//邻接表类型

        { vertexnode adjlist[M];//存放头结点的顺序表

          int n,e;//顶点数,边数

        }linkedgraph;

七、检索

1、顺序检索,二分法检索(存储有序)

        #define MAXSIZE 100

        typedef int datatype;

        typedef struct

        { datatype a[MAXSIZE];

          int len;

        }sequence;

2、分块检索

        #define MAXSIZE 100

        typedef int datatype;

        typedef struct

        { datatype a[MAXSIZE];

          int len;

        }sequence;

        typedef struct

        { datatype key;//块中最大值

          int address;//分界点

        }indexnode;

3、二叉排序树

        typedef int datatype;//结点值的类型

        typedef struct node

        { datatype data;

          struct node *lchild,*rchild;

        }bsnode;

        typedef bsnode *bstree;

4、Huffman树

        typedef struct node

        { int data;//权值

          struct node *lchild,*rchild,*next;

        }hufnode;

        typedef hufnode *linkhuf;

八、排序

        #define MAXSIZE 100//文件中记录个数的最大值

        typedef int keytype;//排序码类型

        typedef struct

        { keytype key;

          int other;//还可定义记录中除了排序码外的其他域

        }recordtype;

        typedef struct

        { recordtype r[MAXSIZE+1];

          int length;//待排序文件中记录的个数

        }table;

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值