数据结构学习之栈、队列等

 

gdb调试段错误
 1.ulimit -c unlimited
 2.ulimit -c 1000
 3.gcc 文件 -g
 4.执行程序(./a.out)生成core文件
 5.gdb a.out core

 

顺序栈
 1.出栈
  DATATYPE PopSeqStack(SeqStack *stack);
  功能:
   从顺序栈中出栈
  参数:
   stack:顺序栈的地址
  返回值:
   出栈的元素

 2.销毁
 int DestroySeqStack(SeqStack *stack);
 功能:
  销毁一个顺序栈
 参数:
  stack:要销毁栈的地址
 返回值:
  成功返回0

链式栈
 1.数据结构
  typedef struct node
  {
   DATATYPE data;
   struct node *next;
  }StackNode;
  typedef struct stack
  {
   StackNode *top;
   int clen;
   int tlen;
  }LinkStack;

 2.操作
  1.创建
  LinkStack *CreateLinkStack(int len);

  2.压栈
  int PushLinkStack(LinkStack *stack, DATATYPE data);

  3.出栈
  DATATYPE PopLinkStack(LinkStack *stack);

  4.判断栈是否为空
  int IsEmptyLinkStack(LinkStack *stack);

  5.判断栈是否为满
  int IsFullLinkStack(LinkStack *stack);

  6.销毁
  int DestoryLinkStack(LinkStack *stack);

多文件编程
 1.构造头文件
  文件中一般存放包含的系统级头文件、定义的
  结构体类型、全局变量、函数的声明
 2.函数文件
  函数文件中包括函数的定义及实现
 3.主函数文件
  包括main函数的实现及函数的调用
 4.makefile文件
  该文件用来描述整个工程的编译原则和规范

 5.实现
  1.头文件的编写
  #ifndef __HEAD_H__
  #define __HEAD_H__

  #endif
  2.函数文件的编写
  把所有函数的实现都写在该文件中

  3.主函数文件的编写
  把主函数的实现写在该文件中

  

队列
 FIFO
 先进队的元素先出队
 后进队的元素后出队

 队尾
 队头

 1.数据结构的描述
 typedef struct queue
 {
  DATATYPE *pdata;
  int head;
  int tail;
  int clen;
  int tlen;
 }SeqQueue;

 2.操作:
  1.创建
  SeqQueue *CreateSeqQueue(int len)
  {
   1.申请空间
   2.对成员变量逐个赋值
   3.返回顺序队列的地址
  }

  2.判断队列是否为满
  int IsFullSeqQueue(SeqQueue *queue);

  3.判断队列是否为空
  int IsEmptySeqQueue(SeqQueue *queue);

  4.进队
  int EnterSeqQueue(SeqQueue *queue, DATATYPE data);

  5.出队
  DATATYPE QuitSeqQueue(SeqQueue *queue);

  6.销毁
  int DestroySeqQueue(SeqQueue *queue);


链式队列
 1.数据结构
 typedef int DATATYPE;
 typedef struct node
 {
  DATATYPE data;
  struct node *next;
 }QueueNode;
 typedef struct queue
 {
  QueueNode *head;
  QueueNode *tail;
  int clen;
  int tlen;
 }LinkQueue;
 2.操作
  1.创建
  LinkQueue *CreateLinkQueue(int len);

  2.判断队列是否为空
  int IsEmptyLinkQueue(LinkQueue *queue);

  3.判断队列是否为满
  int IsFullLinkQueue(LinkQueue *queue);

  4.进队
  int EnterLinkQueue(LinkQueue *queue, DATATYPE data);

  5.出队
  DATATYPE QuitLinkQueue(LinkQueue *queue);

  6.销毁
  int DestroyLinkQueue(LinkQueue *queue);


树型结构
 1.节点
  每一个节点只有一个前驱,但是可以有
  若干个后继
  1.根节点
  2.分支节点
  3.叶子节点(度数为0的节点)
 2.度
  一个节点后继的个数
 3.树的度
  节点中最大的度数就是树的度
 4.深度
  
 5.层
  
 6.高度

 树的高度和深度值是一样的
  
二叉树
 每个节点都有两个分支

 1.状态
  1.有左孩子、右孩子
  2.只有左孩子
  3.只有右孩子
  4.没有左右孩子

 2.遍历
  1.前序遍历
   按照根左右的方式逐个遍历
  2.中序遍历
   按照左根右的方式逐个遍历
  3.后序遍历
   按照左右根的方式逐个遍历
  4.层序遍历
   按照层数从左到右依次遍历
 
 3.数据结构
 typedef struct node
 {
  int num;
  struct node *lchild;
  struct node *rchild;
 }TreeNode;
 4.操作
  1.创建
  TreeNode *CreateTree(int start,int end);
  功能:
   创建一个满二叉树
  参数:
   start:根节点的编号
   end:要创建到节点的编号
  返回值:返回创建树的根节点地址

  2.销毁

  3.前序遍历

  4.中序遍历

  5.后序遍历

  6.层序遍历


 


  
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值