当前位置: 首页 > news >正文

栈和队列代码

栈的顺序存储结构:

typedef struct stack{int*a;int top; int capacity;
}ST;

栈的初始化:

//每一次扩容需要增加四个
void initstack(ST*ps){assert(ps);ps->a=(int*)malloc(sizeof(int)*4);if(ps->a==NULL){printf(“fail”);exit(-1);
}ps->capacity==4;ps->top=0;}

入栈:

//入栈操作
void stackpush(ST*ps,int e){assert(ps);//判断是否已经满了if(ps->top==ps->capacity){//把原来的空间增加为两倍int*tmp=(int*)realloc(ps->a,sizeof(int)*2*ps->capacity);if(tmp==NULL){printf("fail");exit(-1);}else{ps->a=tmp;ps->capacity*=2;}}
ps->a[ps->top]=e;
ps->top++;}

出栈:

//出栈按照先进后出原则
//assert判断指针是否为空如果为空就暂停
void stackpop(ST*ps){assert(ps);assert(ps->top>0);ps->top--;}

栈的链式存储结构:

//节点代码
typedef struct stacknode{int data;struct stacknode*next;//指向下一个节点的指针}s;
typedef struct stack{stack*top;  //指向栈顶的指针};

入栈:

void push(Stack* stack, int data) {  //入栈相当于要有一个新节点s*newnode=(int*)malloc(sizeof(s));newnode->data=data;  //添加的新数据给到新节点指向的datanewnode->nex=stack->top; //新节点的指向的下一个位置为原来栈顶的指针stack->top=newnode;  //新节点成为栈顶}

案例:有效的括号!!20. 有效的括号 - 力扣(LeetCode)

队列结构与栈相似,只不过是先进先出:

typedef struct node{int data;struct node*next;
}q;
typedef struct queue{q*head; //头指针q*tail;  //尾指针
}qu;

为什么要设立头指针、尾指针呢?

头指针用于头出队列:

void queuepop (qu*r){assert(r);q*h =r->head->next //把头节点指针给一个指针暂存int*e=h->data  //头结点的数据暂存r->head->next=h->next;  //r->head->next= r->head->next->next;  但是这样就无法free了free(h);}

尾指针用于尾插操作:

void queuepush(qu*r,int e){assert(r);
//节点插入都需要扩容节点q*s=(q*)malloc(sizeof(q*)); if(s==NULL){exit(-1);}r->tail->next=s;s->data=e;s->next=NULL;r->tail=s;}

通过这两段代码来理解为什么用两个指针,本质上就是为了进行插入和删除本质上就是增删查改这一套。


http://www.mrgr.cn/news/57299.html

相关文章:

  • 破四元!一区飞蛾扑火算法+时序卷积+双向单元+注意力机制!MFO-TCN-BiGRU-Attention多变量时间序列预测
  • 【Qt】控件——Qt多元素控件、常见的多元素控件、多元素控件的使用、List Widget、Table Widget、Tree Widget
  • Unity 开发学习笔记(0):
  • 关于容器docker使用基本命令
  • uniapp结合uview-ui创建项目
  • 探究Redis
  • ARM/Linux嵌入式面经(五二):华为
  • Spring 设计模式之单例模式
  • C++新基础类型(C++11~C++20)
  • ECharts图表图例11
  • 解决cad找不到vcruntime140_1.dll,无法继续执行代码的6种方法
  • 《YOLO 目标检测》—— YOLO v3 详细介绍
  • 拟态UI3.0个人页
  • django模板相关配置
  • 一个将.Geojson文件转成shapefile和kml文件的在线页面工具(续)
  • hive数据库,表操作
  • 前缀和 有图文 超详细整理通俗易懂
  • OpenEular + KVM + virt-manager 笔记
  • Python小程序 - 替换文件内容
  • 论文精读:TiC-CLIP: Continual Training of CLIP Models(三)
  • pdf表格读取和筛选
  • ArrayList 源码分析
  • 论文精读:TiC-CLIP: Continual Training of CLIP Models(二)
  • 搜维尔科技:使用CyberGlove数据手套控制机械手遥操作拿鸡蛋
  • LPDDR4/LPDDR4X讲解(一)
  • 香橙派、树莓派与Jetson的选择攻略:为您的项目找到最佳匹配