17.数据结构学习

这两周学习了数据结构中的栈和队列

简单的复习一下,他们都是很重要的线性结构,其中栈的结构是后进先出,而队列就是像排队一样先进先出,后进后出。
在这里插入图片描述
从书中得到代码,栈的存储结构及各种方法

typedef struct
{
    ElemType *base;
    ElemType *top;
    int stackSize;
}sqStack;
//----- 栈的动态分配顺序存储结构 -----
#define STACK_INIT_SIZE 100   //顺序栈初始容量
#define STACKINCREMENT  10     //顺序栈容量增量
typedef struct {
    SElemType  *base;     //顺序栈基地址(栈底指针)
    SElemType  *top;       //栈顶指针
    int            stacksize;    //顺序栈当前存储容量
}SqStack;
//----- 基本操作的算法描述 -----
Status InitStack( SqStack &S ) {
    // 构造一个空栈 S
    S.base=(SElemType*)malloc
                 (STACK_INIT_SIZE*sizeof(SElemType));
    if  (!S.base) exit(OVERFLOW);    // 存储分配失败
    S.top = S.base;  
    S.stacksize = STACK_INIT_SIZE;   
    return OK;
}//InitStack
Status GetTop( SqStack S, SElemType &e ) {
    // 若栈不空,则用 e 返回 S 的栈顶元素,并返回 OK;
     // 否则返回 ERROR
    if  (S.top = = S.base)  return ERROR;
    e = *(S.top-1);  
    return OK;
}//GetTop
Status Push( SqStack &S,  SElemType e ) {
    // 在栈 S 中插入元素 e 为新的栈顶元素
    if (S.top-S.base>=S.stacksize) { // 栈满,追加存储空间 
       newbase=(SElemType*)realloc(S.base,                     
          (S.stacksize+STACKINCREMENT)*sizeof(SElemType));
       if  (!newbase) exit(OVERFLOW);    // 存储分配失败
       S.base = newbase;
       S.top = S.base+S.stacksize;  
       S.stacksize += STACKINCREMENT; 
    }
    *S.top++ = e;  
    return OK;
}//Push
Status Pop( SqStack S, SElemType &e ) {
    // 若栈不空,则删除 S 的栈顶元素,用 e 返回其值,
     // 并返回 OK; 否则返回 ERROR
    if  (S.top = = S.base)  return ERROR;
    e = *--S.top;  
    return OK;
}//Pop 

队列既可以用链表实现,也可以用顺序表实现。

跟栈相反的是,栈一般我们用顺序表来实现,而队列我们常用链表来实现,简称为链队列。

//队列的链式表示和实现
typedef struct QNode{
    ElemType data;
    struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
    QueuePtr front;//队头指针
    QueuePtr rear;//队尾指针
}LinkQueue;

其他的方法和栈类似,C中直接用stack或queue构造就可以用这两个数据类型了!在有相关题型时特别方便。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值