c语言 队列长度,c语言 队列
栈是限定尽在表尾进行插入或删除的线性表(先进先出)。对栈来说,表尾称为栈顶,表头称为栈底。
现在以下面的程序说明对栈的基本操作。
#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语言 队列相关推荐
- 刁肥宅手笔:纯C语言实现链式队列的相关操作
先上图,以图服人: 图一 程序运行截图1 图二 程序运行截图2 上代码: 头文件LinkQueue.h: /*LinkQueue.h*/#ifndef LINKQUEUE_H_INCLUDED #de ...
- 数据结构(八) -- C语言版 -- 栈和队列 - 队列的设计与实现
我让你知道我有啥 零.读前说明 一.队列的概述 二.队列的操作 三.队列的两种存储结构的模型概述 四.顺序存储结构的队列及实现 4.1.顺序存储结构的传统队列简易实现与测试 4.2.顺序存储结构的队列 ...
- 数据结构源码笔记(C语言):链接队列
/* LinkQueue.c*/ /*链接队列:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataType ...
- python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt
数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...
- 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)
C语言如何实现多级队列缓存(Queue.FIFO) 作者 将狼才鲸 日期 2022-03-20 1.各种缓存结构: 基础:指针.链表.内存.数组. 数据结构基础:表.树.图(多对多). 缓冲区/buf ...
- c语言自动生成球队名称,C语言实现队(循环队列)
之前用链表实现队,这里用数组实循环队列,今天又看了一下队列,发现少了计算队列长度的函数 队列的实现代码,牺牲一个元素存储空间 #include#define maxsize 10 typedef in ...
- c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...
前言 C语言属于高级程序语言的一种,它的前身是"ALGOL".其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇.C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上.然而随着科 ...
- 【CIPS 2016】(4-5章)语言认知模型、语言表示以及深度学习(研究进展、现状趋势)
CIPS 2016 笔记整理 <中文信息处理发展报告(2016)>是中国中文信息学会召集专家对本领域学科方 向和前沿技术的一次梳理,官方定位是深度科普,旨在向政府.企业.媒体等对中文 信息 ...
- 2,Java语言基础-Java语言基本程序设计知识
Java语言基础 Java语言基本程序设计知识 1,JavaAPI概述 1.1,什么是API API是指应用程序接口( Application Program Interface, API),故名思意 ...
- 自学golang【第一章:go语言基础知识】为什么要学习go语言?go语言与c语言的关系?go语言创始人?go语言的特性有哪些?go语言适合做什么?国内外有哪些企业或项目使用go语言?
事先声明:本文部分内容参考了尹成的笔记,如果侵权请联系删除. 我是一名自学go语言的初学者,从今天开始我将会坚持更新go语言的相关知识,从入门到精通,如果大家有什么需要可以加我QQ:239479969 ...
最新文章
- socket的拉屎模型
- python无法安装pillow_pyhton安装pillow问题解决
- c语言航班订票管理系统源代码,简易C语言航空订票系统
- boost::errinfo_errno的用法测试程序
- 牛客 - 降维打击(dp)
- 保存图片验证码到redis数据库
- uniapp - 接入科大讯飞语音评测
- 小程序毕设作品之微信小程序点餐系统毕业设计(4)开题报告
- 结构梁配筋最牛插件_牛肉食用指南(五):日式烧肉的由来,各部位怎么烤最好吃?...
- java jdk jre版本要一样吗a_JDK是什么?JRE是什么?JDK和JRE的区别?
- 2021年软件测试工具总结——接口测试工具
- numpy的使用(一)(reshape()有待研究)
- 交互设计流程是怎样的?
- 缩写月份单词python_月份的英文单词、缩写及由来
- (转)Openbravo ERP介绍(二)
- Ackerman函数 非递归 java_ackerman(ackerman是谁)
- Mac软件推荐:Soulver原来这么好用
- 各种滤镜算法C语言,Photoshop入门学习之PS 滤镜算法原理——染色玻璃
- MS Outlook接收的附件显示文件损坏,真的吗?怎么办?
- 超高颜值高性价比蓝牙耳机,2021学生党最爱平价蓝牙耳机推荐