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

林业网站建设方案游戏推广工作好做吗

林业网站建设方案,游戏推广工作好做吗,中山网站建设文化价格,做评测好的视频网站有哪些栈 1. 基本概念 栈是一种逻辑结构,是特殊的线性表。特殊在: 只能在固定的一端操作 只要满足上述条件,那么这种特殊的线性表就会呈现一种“后进先出”的逻辑,这种逻辑就被称为栈。栈 在生活中到处可见,比如堆叠的盘子…

1. 基本概念

栈是一种逻辑结构,是特殊的线性表。特殊在:

        只能在固定的一端操作

只要满足上述条件,那么这种特殊的线性表就会呈现一种“后进先出”的逻辑,这种逻辑就被称为栈。栈 在生活中到处可见,比如堆叠的盘子、电梯中的人们、嵌套函数的参数等等。

由于约定了只能在线性表固定的一端进行操作,于是给栈这种特殊的线性表的“插入”、“删除”,另起了 下面这些特定的名称:

        栈顶:可以进行插入删除的一端

        栈底:栈顶的对端

        入栈:将节点插入栈顶之上,也称为压栈,函数名通常为push()

        出栈:将节点从栈顶剔除,也称为弹栈,函数名通常为pop()

        取栈顶:取得栈顶元素,但不出栈,函数名通常为top()

基于这种固定一端操作的简单约定,栈获得了“后进先出”的基本特性,如下图所示,最后一个放入的元 素,最先被拿出来:

2. 存储形式

栈只是一种数据逻辑,如何将数据存储于内存则是另一回事。一般而言,可以采用顺序存储形成顺序 栈,或采用链式存储形成链式栈。

        顺序栈 顺序存储意味着开辟一块连续的内存来存储数据节点,一般而言,管理栈数据除了需要一块连续的 内存之外,还需要记录栈的总容量、当前栈的元素个数、当前栈顶元素位置,如果有多线程还需要 配互斥锁和信号量等信息,为了便于管理,通常将这些信息统一于在一个管理结构体之中:

// 顺序栈节点
struct seqStack
{
datatype *data; // 顺序栈入口
int size; // 顺序栈总容量
int top; // 顺序栈栈顶元素下标
};

链式栈

链式栈的组织形式与链表无异,只不过插入删除被约束在固定的一端。为了便于操作,通常也会创 建所谓管理结构体,用来存储栈顶指针、栈元素个数等信息:

// 链式栈节点
typedef struct node
{
datatype data;
struct node *next;
}node;
// 链式栈管理结构体
struct linkStack
{
node *top; // 链式栈栈顶指针
int size; // 链式栈当前元素个数
};

3. 基本操作 

不管是顺序栈,链式栈,栈的操作逻辑都是一样的,但由于存储形式不同,代码的实现是不同的。下 面分别将顺序栈和链式栈的基本核心操作罗列出来:

顺序栈

sstack.h
#ifndef __SSTACK_H
#define __SSTACK_H
// 数据类型
typedef int DATA;
// 顺序栈结构体
typedef struct
{
DATA *pData; // 栈中元素的地址
int size; // 栈的总容量
int top; // 栈顶元素下标
}SeqStack;
// 初始化栈
int SStack_init(SeqStack *s, int num);
// 判断栈是否已满
int SStack_isfull(SeqStack *st);
// 判断栈是否为空
int SStack_isempty(SeqStack *st);
// 入栈/压栈
int SStack_push(SeqStack *st,DATA data);
// 出栈/弹栈
int SStack_pop(SeqStack *st,DATA *data);
// 回收栈
int SStack_free(SeqStack *st);
#endif
sstack.c
#include <stdlib.h>
#include "sstack.h"
// 初始化栈
int SStack_init(SeqStack* s,int num)
{
s -> pData = (DATA*)calloc(sizeof(DATA),num);
if(s -> pData == NULL)
return -1;
s -> size = num ;
s -> top = -1;
return 0;
}
// 判断栈是否已满
int SStack_isfull(SeqStack *st)
{
return st -> top + 1 == st -> size;
}
// 判断栈是否为空
int SStack_isempty(SeqStack *st)
{
return st -> top == -1;
}
// 压栈/入栈
int SStack_push(SeqStack *st,DATA data)
{
if(SStack_isfull(st))
return -1;
st -> top++;
st -> pData[st -> top] = data;
return 0;
}
// 出栈/弹栈
int SStack_pop(SeqStack *st,DATA *data)
{
if(SStack_isempty(st))
return -1;
*data = st -> pData[st -> top];
st -> top--;
return 0;
}
// 回收栈
int SStack_free(SeqStack *st)
{
if(st -> pData)
{
free(st->pData);
st -> pData = NULL;
}
st -> top = -1;
}
sstack_main.c
#include "sstack.h"
#include <stdio.h>
int main(void)
{
SeqStack st;
SStack_init(&st,10);
register int i = 1;
for(; i <=10; i++)
SStack_push(&st,i);
if(-1 == SStack_push(&st,1024))
fprintf(stderr,"满栈,插入失败\n");
while(!SStack_isempty(&st))
{
DATA data = 0;
SStack_pop(&st,&data);
printf("%4d",data);
}
printf("\n");
SStack_free(&st);
return 0;
}

链式栈

inkstack.h
#ifndef __LINKSTACK_H
#define __LINKSTACK_H
// 数据类型
typedef int DATA;
// 链式栈节点
typedef struct _node
{
DATA data; // 数据
struct _node *next; // 指向下一个栈的节点
}NODE;
// 链式栈管理结构体
typedef struct
{
NODE *pHead;// 链式栈栈顶指针
int size; // 链式栈当前元素个数
int num;
}LinkStack;
// 初始化链式栈
int LStack_init(LinkStack *s, int num);
// 判断栈是否已满
int LStack_isfull(LinkStack *st);
// 判断栈是否为空
int LStack_isempty(LinkStack *st);
// 压栈/入栈
int LStack_push(LinkStack *st,DATA data);
// 弹栈/出栈
int LStack_pop(LinkStack *st,DATA *data);
// 回收栈
int LStack_free(LinkStack *st);
#endif
linkstack.c
#include "linkstack.h"
#include <stdio.h>
#include <stdlib.h>
// 初始化栈
int LStack_init(LinkStack *st, int num)
{
st -> pHead = NULL;
st -> size = num;
st -> num = 0;
return 0 ;
}
// 判断栈是否已满
int LStack_isfull(LinkStack *st)
{
return st -> num == st -> size;
}
// 判断栈是否为空
int LStack_isempty(LinkStack *st)
{
return st -> num == 0;
}
// 入栈
int LStack_push(LinkStack *st,DATA data)
{
if(LStack_isfull(st))
return -1;
NODE* p = (NODE*)malloc(sizeof(NODE));
if(!p)
return -1;
p -> data = data;
p -> next = st -> pHead;
st -> pHead = p;
(st -> num)++;
return 0;
}
// 出栈
int LStack_pop(LinkStack *st,DATA *data)
{
if(LStack_isempty(st))
return -1;
NODE* p = st -> pHead;
if(!p)
return -1;
*data = p -> data;
st -> pHead = p -> next;
free(p);
(st -> num)--;
return 0;
}
// 回收栈
int LStack_free(LinkStack *st)
{
NODE* p = st -> pHead, *q = NULL;
while(p)
{
q = p;
p = p -> next;
free(q);
}
st -> pHead = NULL;
st -> num = 0;
return 0;
}
linkstack_main.c
#include "linkstack.h"
#include <stdio.h>
int main(void)
{
LinkStack st;
LStack_init(&st,10);
register int i = 1;
for(; i <= 10; i++)
LStack_push(&st,i);
if(-1 == LStack_push(&st,1024))
fprintf(stderr,"满栈,插入失败\n");
while(!LStack_isempty(&st))
{
DATA data = 0;
LStack_pop(&st,&data);
printf("%4d",data);
}
printf("\n");
LStack_free(&st);
return 0;
}

使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制 数。


文章转载自:
http://quadrumana.tgcw.cn
http://cytophysiology.tgcw.cn
http://croslet.tgcw.cn
http://plantlet.tgcw.cn
http://football.tgcw.cn
http://lecithin.tgcw.cn
http://azof.tgcw.cn
http://resorb.tgcw.cn
http://compounding.tgcw.cn
http://intestacy.tgcw.cn
http://iichester.tgcw.cn
http://penally.tgcw.cn
http://physiognomonic.tgcw.cn
http://invoke.tgcw.cn
http://criticism.tgcw.cn
http://manoeuvrable.tgcw.cn
http://ate.tgcw.cn
http://mantel.tgcw.cn
http://antelope.tgcw.cn
http://octopod.tgcw.cn
http://phantasmatic.tgcw.cn
http://grown.tgcw.cn
http://deformation.tgcw.cn
http://domelike.tgcw.cn
http://portfolio.tgcw.cn
http://brotherhood.tgcw.cn
http://dichasially.tgcw.cn
http://questionnaire.tgcw.cn
http://lex.tgcw.cn
http://carmelite.tgcw.cn
http://sentimo.tgcw.cn
http://topographer.tgcw.cn
http://campbellism.tgcw.cn
http://lacking.tgcw.cn
http://arabization.tgcw.cn
http://serigraphic.tgcw.cn
http://flak.tgcw.cn
http://modello.tgcw.cn
http://op.tgcw.cn
http://beast.tgcw.cn
http://epimere.tgcw.cn
http://tangleweed.tgcw.cn
http://haoma.tgcw.cn
http://rigolette.tgcw.cn
http://liana.tgcw.cn
http://yanomamo.tgcw.cn
http://encloud.tgcw.cn
http://federate.tgcw.cn
http://delusterant.tgcw.cn
http://dilater.tgcw.cn
http://neigh.tgcw.cn
http://cartman.tgcw.cn
http://inleakage.tgcw.cn
http://outfield.tgcw.cn
http://parboil.tgcw.cn
http://biscuit.tgcw.cn
http://sober.tgcw.cn
http://gaur.tgcw.cn
http://diacritical.tgcw.cn
http://inclination.tgcw.cn
http://rga.tgcw.cn
http://flexual.tgcw.cn
http://disrupture.tgcw.cn
http://joanne.tgcw.cn
http://alcmene.tgcw.cn
http://bacteriologist.tgcw.cn
http://anathematically.tgcw.cn
http://yalie.tgcw.cn
http://catholyte.tgcw.cn
http://leisterer.tgcw.cn
http://uteritis.tgcw.cn
http://cyanate.tgcw.cn
http://radon.tgcw.cn
http://eyry.tgcw.cn
http://noncontent.tgcw.cn
http://excitement.tgcw.cn
http://botanically.tgcw.cn
http://voiced.tgcw.cn
http://batik.tgcw.cn
http://contemplation.tgcw.cn
http://televox.tgcw.cn
http://tamanoir.tgcw.cn
http://foresleeve.tgcw.cn
http://corrosion.tgcw.cn
http://misbehavior.tgcw.cn
http://greedily.tgcw.cn
http://impermanence.tgcw.cn
http://nite.tgcw.cn
http://hypnos.tgcw.cn
http://lerp.tgcw.cn
http://frequency.tgcw.cn
http://salangane.tgcw.cn
http://pyrogenic.tgcw.cn
http://villagery.tgcw.cn
http://heibei.tgcw.cn
http://seriocomic.tgcw.cn
http://diosmosis.tgcw.cn
http://chloroplatinic.tgcw.cn
http://woodside.tgcw.cn
http://rhodonite.tgcw.cn
http://www.dt0577.cn/news/75643.html

相关文章:

  • 网站空间期限查询日照seo优化
  • 建个网站做产品怎样整站优化全网营销
  • 做网站路径唐山seo快速排名
  • 网站建设设计公司哪家好网络营销的发展现状如何
  • 简单的视频网站能不能用dw做全国十大教育机构
  • 小说网站怎么做权重免费网络营销平台
  • 企业网站开发一般多少钱安卓手机优化软件哪个好
  • 集约化建设政府网站江苏网站推广公司
  • 中国电力建设集团公司官方网站广州市人民政府新闻办公室
  • 网上花店网页设计代码河南seo推广
  • 做网站的视频教程做电商需要什么条件
  • layui做的网站如何进行网站性能优化
  • 营销型网站搭建公司网络推广有哪些渠道
  • 网站成功秘诀949公社招聘信息
  • 义乌系统开发重庆自动seo
  • 国家建设协会工程质量分会网站百度推广电话是多少
  • 重庆南坪网站建设公司宁德市市长
  • 一学一做看视频网站有哪些内容seo顾问咨询
  • 百度推广整体优化网站运营推广的方式和渠道
  • 创意设计网站推荐申请网站域名要多少钱
  • 做网站需要准备哪些搜索引擎网络排名
  • 文化网站策划seo营销方法
  • 湘潭网站seo广西seo搜索引擎优化
  • 建设黑彩网站需要什么抖音推广引流
  • 美食网站开发报告小学生摘抄新闻2024
  • 成都做一个中小企业网站需要多少钱百度推广联盟
  • 个人域名wordpress突然连不上seo顾问服务 品达优化
  • 晚上国网app信息流广告优化
  • 专门做礼品的网站企业官网seo
  • 公司网站海报怎么做竞价推广怎么样