栈是限定尽在表尾进行插入或删除的线性表(先进先出)。对栈来说,表尾称为栈顶,表头称为栈底。

现在以下面的程序说明对栈的基本操作。

#include#include#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define STACK_INIT_SIZE 12

#define ADD 2

typedef struct{

int *base;

int *top;

int stacksize;

}Stack;

int InitStack(Stack *S)                      //初始化

{

S->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));

if(!S->base)

exit(1);

S->top=S->base;

S->stacksize=STACK_INIT_SIZE;

return OK;

}

int Push(Stack *S,int e)                    //入栈

{

if(S->top - S->base >= S->stacksize)

{

S->base = (int *)realloc(S->base,(S->stacksize+ADD)*sizeof(int));

if(!S->base)

exit(1);

S->top=S->base+S->stacksize;

S->stacksize+=ADD;

}

*(S->top)++=e;

return OK;

}

int Pop(Stack *S,int *e)                    //出栈

{

if(S->top==S->base)

return ERROR;

*e=*(--S->top);

return OK;

}

int visit(int c)

{

printf("%d ",c);

return OK;

}

int StackTraverse(Stack S,int (*visit)(int))   //遍历

{

while(S.top>S.base)

visit(*S.base++);

printf("\n");

return OK;

}

int StackEmpty(Stack S)                        //判断栈是否为空

{

if(S.top == S.base)

return TRUE;

else

return FALSE;

}

int DestroyStack(Stack *S)                     //销毁栈

{

free(S->base);

S->base=NULL;

S->top=NULL;

S->stacksize=0;

return OK;

}

int ClearStack(Stack *s)                      //栈置为空

{

s->top = s->base;

return OK;

}

int StackLength(Stack S)                    //栈的深度

{

return (S.top-S.base);

}

int GetTop(Stack S,int *e)                  //获取栈顶元素

{

if(S.top==S.base)

return ERROR;

*e = *(S.top-1);

return OK;

}

int main(void)

{

int j;

Stack s;

int e;

if(InitStack(&s))                                        //新建

for(j=0;j<5;j++)

Push(&s,j);                                          //入栈

printf("栈中元素依次为:");

StackTraverse(s,visit);                                        //第一次遍历

Pop(&s,&e);                                                    //出栈

printf("弹出的栈顶元素 e=%d\n",e);

printf("栈中元素依次为:");

StackTraverse(s,visit);                                        //次遍历

printf("栈空否:%d (1:空 0:否)\n",StackEmpty(s));              //判断栈是否为空

GetTop(s,&e);

printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s));       //获取栈顶元素,栈的深度

ClearStack(&s);                                                //清空栈

printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));

DestroyStack(&s);                                             //销毁栈

printf("销毁栈后,s.top=%u s.base=%u s.stacksize=%d\n",s.top,s.base, s.stacksize);

return 0;

}

#include#include#include

#define STACK_SIZE 5

#define OK 1

#define ERROR 0

typedef struct  note

{

int x;

int y;

}Note;

typedef struct

{

Note *base;

Note *top;

int stack_size;

}Stack;

int init_stack(Stack *p)

{

p->base=malloc(STACK_SIZE * sizeof(struct note));

if(!p->base)

exit(1);

p->top=p->base;

p->stack_size=STACK_SIZE;

return OK;

}

int push(Stack *p,Note e)

{

if(p->top - p->base >= p->stack_size)

return ERROR;

else

*(p->top)++=e;

return OK;

}

int Pop(Stack *p,Note *e)                   //出栈

{

if(p->top==p->base)

return ERROR;

*e=*(--p->top);

return OK;

}

int visit(Note c,Note q)

{

if( c.x!=q.x || c.y!=q.y)

return OK;

else

return ERROR;

}

int stack_traverse(Stack p,int (*visit)(Note, Note),Note q)   //遍历查询

{

int flag=1;

while(p.top > p.base)

{

if(0==visit(*p.base++,q))

return ERROR;

}

return OK;

}

int stack_traverse_print(Stack p)   //遍历打印

{

while(p.top>p.base)

{

printf("%d %d\n",p.base->x,p.base->y);

p.base++;

}

return OK;

}

int main()

{

int x=0,y=0,i=0;

int flag=1;

Note q;

Stack p;

init_stack(&p);   //栈出始化

while(flag)

{

printf("请输入 X and Y:");

scanf("%d %d",&x,&y);

q.x=x;

q.y=y;

if(1==stack_traverse(p,visit,q))              //遍历,若栈中已有将加入的数据,则不加入

{

if(0==push(&p,q))                          //出栈

{

printf("Overflow\n");

break;

}

}

else

printf("The Stack already has this element\n");

printf("是否继续增加元素(flag=1):");

scanf("%d",&flag);

}

stack_traverse_print(p);

return 0;

}

c语言 队列长度,c语言 队列相关推荐

  1. 刁肥宅手笔:纯C语言实现链式队列的相关操作

    先上图,以图服人: 图一 程序运行截图1 图二 程序运行截图2 上代码: 头文件LinkQueue.h: /*LinkQueue.h*/#ifndef LINKQUEUE_H_INCLUDED #de ...

  2. 数据结构(八) -- C语言版 -- 栈和队列 - 队列的设计与实现

    我让你知道我有啥 零.读前说明 一.队列的概述 二.队列的操作 三.队列的两种存储结构的模型概述 四.顺序存储结构的队列及实现 4.1.顺序存储结构的传统队列简易实现与测试 4.2.顺序存储结构的队列 ...

  3. 数据结构源码笔记(C语言):链接队列

    /* LinkQueue.c*/ /*链接队列:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataType ...

  4. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  5. 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)

    C语言如何实现多级队列缓存(Queue.FIFO) 作者 将狼才鲸 日期 2022-03-20 1.各种缓存结构: 基础:指针.链表.内存.数组. 数据结构基础:表.树.图(多对多). 缓冲区/buf ...

  6. c语言自动生成球队名称,C语言实现队(循环队列)

    之前用链表实现队,这里用数组实循环队列,今天又看了一下队列,发现少了计算队列长度的函数 队列的实现代码,牺牲一个元素存储空间 #include#define maxsize 10 typedef in ...

  7. c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...

    前言 C语言属于高级程序语言的一种,它的前身是"ALGOL".其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇.C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上.然而随着科 ...

  8. 【CIPS 2016】(4-5章)语言认知模型、语言表示以及深度学习(研究进展、现状趋势)

    CIPS 2016 笔记整理 <中文信息处理发展报告(2016)>是中国中文信息学会召集专家对本领域学科方 向和前沿技术的一次梳理,官方定位是深度科普,旨在向政府.企业.媒体等对中文 信息 ...

  9. 2,Java语言基础-Java语言基本程序设计知识

    Java语言基础 Java语言基本程序设计知识 1,JavaAPI概述 1.1,什么是API API是指应用程序接口( Application Program Interface, API),故名思意 ...

  10. 自学golang【第一章:go语言基础知识】为什么要学习go语言?go语言与c语言的关系?go语言创始人?go语言的特性有哪些?go语言适合做什么?国内外有哪些企业或项目使用go语言?

    事先声明:本文部分内容参考了尹成的笔记,如果侵权请联系删除. 我是一名自学go语言的初学者,从今天开始我将会坚持更新go语言的相关知识,从入门到精通,如果大家有什么需要可以加我QQ:239479969 ...

最新文章

  1. socket的拉屎模型
  2. python无法安装pillow_pyhton安装pillow问题解决
  3. c语言航班订票管理系统源代码,简易C语言航空订票系统
  4. boost::errinfo_errno的用法测试程序
  5. 牛客 - 降维打击(dp)
  6. 保存图片验证码到redis数据库
  7. uniapp - 接入科大讯飞语音评测
  8. 小程序毕设作品之微信小程序点餐系统毕业设计(4)开题报告
  9. 结构梁配筋最牛插件_牛肉食用指南(五):日式烧肉的由来,各部位怎么烤最好吃?...
  10. java jdk jre版本要一样吗a_JDK是什么?JRE是什么?JDK和JRE的区别?
  11. 2021年软件测试工具总结——接口测试工具
  12. numpy的使用(一)(reshape()有待研究)
  13. 交互设计流程是怎样的?
  14. 缩写月份单词python_月份的英文单词、缩写及由来
  15. (转)Openbravo ERP介绍(二)
  16. Ackerman函数 非递归 java_ackerman(ackerman是谁)
  17. Mac软件推荐:Soulver原来这么好用
  18. 各种滤镜算法C语言,Photoshop入门学习之PS 滤镜算法原理——染色玻璃
  19. MS Outlook接收的附件显示文件损坏,真的吗?怎么办?
  20. 超高颜值高性价比蓝牙耳机,2021学生党最爱平价蓝牙耳机推荐

热门文章

  1. git提交代码至代码仓库详细步骤
  2. flowable设计器节点属性扩展_gooflow设计器API说明书
  3. VSCode使用eclipse快捷键
  4. 最新Hadoop环境搭建流程
  5. 【资料合集】阿里巴巴开源技术汇总——内含115个软件与100+技术文档、PDF下载
  6. VoIP服务器Asterisk安装及部署
  7. 学习笔记|Pytorch使用教程22(hook函数与CAM可视化)
  8. 文件生成BASE64,base64转文件
  9. svnadmin hotcopy整库拷贝方式(转载)
  10. eeglab导出图片