您身边的网站建设专家
成功案例

【建站服务】张北申请400电话费用【张北企业全国热线电话办理】张北开通400电话电信价格、张北微信公众号代运营外包托管、张北网店编辑装修美工、张北网站推广优化大概需要多少钱-域名申请

日期: 2022-09-20 15:12:09 浏览数:3


上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


张北申请400电话费用【张北企业全国热线电话办理】张北开通400电话电信价格、张北微信公众号代运营外包托管、张北网店编辑装修美工、张北网站推广优化大概需要多少钱


河北省张家口市张北县地处河北省西北部,内蒙古高原南缘的坝上地区,境域东西109公里,南北67公里,东南部与崇礼区交界,桦皮岭为全县最高点,海拔2128米;北、中部地势平坦,向西北渐低,安固里淖为最低点,海拔1300米。全县总面积4185平方公里,辖18个乡镇、366个行政村、1167个自然村,总人口37.2万人。居民以汉族为主,占总人口的98%,还有蒙古族、回族、满族等。张北县是离京津地区最近的高原地区,夏天气候凉爽是避暑胜地。

张北县被列为第一批国家新型城镇化综合试点地区。 [1]  2019年11月,入选第二批节水型社会建设达标县(区)名单。 [2]  2020年2月29日,退出贫困县序列,正式脱贫“摘帽”。 [3]  2020年12月,入选河北省数字乡村试点地区名单。



5. push (x,S )。如果S 已满,返回FALSE;否则,将元素x 添加到S 的栈顶,并返回TRUE

pop 的一个常见变种会假设S 非空。它只接受S 作为参数,并返回被弹出的元素x。而pop 的另一个版本则根本不返回值,它只是将栈顶处的元素删除。同样,我们可以在编写push 时假设S“未满”。在这种情况下,push 不返回任何值。

6.6.2 栈的数组实现

用于表的这种实现也能用于栈。我们将首先讨论基于数组的实现,接着讨论链表表示。在两种情况下,我们都将元素类型定为int。更一般化的工作还是留作本节习题。

图 6-16 表示栈的数组

基于数组的整数栈的声明如下。

typedef struct {
    int A[MAX];
    int top;} STACK;复制代码

在基于数组的实现中,栈既可以向上增长(从较低区域向较高区域),也可以向下增长(从较高区域向较低区域)。在这里我们选择让栈向上增长5,也就是说,栈中最老的元素a0在位置0,第二老的元素a1在位置1,而最新插入的元素an-1在位置n-1。

5因此“栈顶”在图中是出现在底部的,这是种不凑巧但相当标准的约定。

数组结构体中的top字段指示了栈顶的位置。因此,在图6-16中,top的值为n-1。空栈是通过top=-1来表示的。在这种情况下,数组A的内容是无关紧要的,栈中没有任何元素。

6.6.1节中定义的5种栈操作对应的程序如图6-17所示。我们通过引用传递栈,来避免复制作为函数参数的大数组。

void clear(STACK *pS){
    pS->top = -1;}BOOLEAN isEmpty(STACK *pS){
    return (pS->top < 0);}BOOLEAN isFull(STACK *pS){
    return (pS->top >= MAX-1);}BOOLEAN pop(STACK *pS, int *px){
    if (isEmpty(pS))
        return FALSE;
    else {
        (*px) = pS->A[(pS->top)--];
        return TRUE;
    }}BOOLEAN push(int x, STACK *pS){
    if (isFull(pS))
        return FALSE;
    else {
        pS->A[++(pS->top)] = x;
        return TRUE;
    }}复制代码

图 6-17 用来实现数组上的栈操作的函数

6.6.3 栈的链表实现

与表一样,可以用链表数据结构表示栈。不过,如果栈顶是表的前端就会很方便。这样的话,可以在表的表头压入和弹出,都只用花O(1)的时间。如果必须找到表的端点再压入和弹出,对长度为n 的栈执行这些操作就要花O(n)的时间。而这样一来,栈S=(a1,a2,…,an)必须用链表“倒着”表示为:

{%}

在定义表单元时使用过的类型定义宏也可以用于栈。宏

DefCell(int, CELL, STACK);复制代码

定义了整数栈,并扩展为

typdef struct CELL *STACK;struct CELL {
    int element;
    STACK next;};复制代码

对这种表示而言,5种操作可以用图6-18中的函数实现。我们假设malloc从不会用尽空间,这意味着isFull 操作总是会返回FALSE,而且push 操作从不会失败。

void clear(STACK *pS){
    (*pS) = NULL;}BOOLEAN isEmpty(STACK *pS){
    return ((*pS) == NULL);}BOOLEAN isFull(STACK *pS){
    return FALSE;}BOOLEAN pop(STACK *pS, int *px){
    if ((*pS) == NULL)
        return FALSE;
    else {
        (*px) = (*pS)->element;
        (*pS) = (*pS)->next;
        return TRUE;
    }}BOOLEAN push(int x, STACK *pS){
    STACK newCell;

    newCell = (STACK) malloc(sizeof(struct CELL));
    newCell->element = x;
    newCell->next = (*pS);
    (*pS) = newCell;
    return TRUE;}复制代码

图 6-18 链表实现的栈所使用的函数

对用链表实现的栈执行push 和pop 的效果如图6-19所示。

图 6-19 对用链表实现的栈执行压入和弹出操作

6.6.4 习题

1. 由空栈开始,在执行操作序列push (a )、push (b )、pop 、push (c )、push (d )、pop 、push (e )、poppop 之后,栈中还剩什么。

2. 只使用本节讨论的5种栈操作操作栈,编写C语言程序,按照图6-9所示的算法,为使用整数操作数及4种常用算术运算符的后缀表达式求值。恰当地定义数据类型STACK,并先后在程序中用上图6-17和图6-18中的函数,以此证实大家编写的程序既可以使用数组实现,也可以使用链表实现。

3. * 怎样用栈为前缀表达式求值?

4. 计算图6-17和图6-18中各函数的运行时间。它们是否全为O(1)?

5. 栈ADT有时会使用top 操作,top (S )会返回栈S(一定要假设该栈非空)的栈顶元素。编写可与本节中定义栈的

(a) 数组数据结构

(b) 链表数据结构

一起使用的top 函数。这两个top 的实现花的时间是否都是O(1)?

6. 模拟栈,计算以下后缀表达式的值:

(a) ab+cd×+e+

(b) abcde++++

(c) ab+c+d+e+

7. * 假设从空栈开始,执行一些压入和弹出操作。如果在这些操作之后的栈为(a1,a2,…,an),栈顶在右侧,证明:对i=1,2,…,n-1,ai 是在ai+1压入之前被压入栈的。


张北申请400电话费用张北企业全国热线电话办理张北开通400电话电信价格、张北微信公众号代运营外包托管、张北网店编辑装修美工、张北网站推广优化大概需要多少钱


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


全国咨询热线:400-111-6878

地址:全国各地都有驻点商务

Copyright © 2021 通陆科技

网站建设上往建站