是栈还是队列c语言实验报告怎么写,队列和栈(C语言)
栈和队列的基本性质
栈是先进后出的结构(弹夹)
队列是先进先出的(排队)
栈和队列在实现结构上可以有数组和链表两种方式
栈结构的基本操作:
1、弹栈
2、访问栈顶元素
3、压栈操作
4、返回当前栈中的元素个数
队列结构的基本操作:
1、队列元素进队列是从队尾插入的
2、队列元素出队列是从对头弹出的 (类似于日常排队)
/*栈的结构定义(顺序栈)*/
#define MAXSIZE 100
typedef int ElemType; /*视栈中要存放的具体元素类型而定*/
typedef int Status;
typedef struct
{
ElemType data[MAXSIZE]; //利用系统的栈来存放栈元素
int top;
}Stack;
typedef struct
{
ElemType *base; //利用堆来存放栈的元素
ElemType *top; //栈顶指针和栈底指针
int count; //栈的大小
}Stack1;
/*栈的初始化*/
Status InitStack(Stack *s)
{
if(s == NULL)
{
return -1;
}
s->top = -1; //初始化栈顶指针
return 0;
}
#define NUM 10
Status InitStack(Stack1 *s1)
{
if(s1 == NULL)
{
return -1;
}
s1->top = (ElemType *)malloc(sizeof(ElemType)*NUM); //初始化栈顶指针
if(NULL == s1->top)
{
return -1; //申请内存失败
}
s1->base = s1->top;
s1->count = 0;
return 0;
}
/*压栈*/
Status push(Stack *s, ElemType e)
{
if(s->top == MAXSIZE-1)
{
//栈满
return -1;
}
s->top++;
s->data[s->top] = e;
return 0;
}
Status push(Stack1 *s1, ElemType e)
{
if(s1->top == s1->base+NUM-1)
{
//栈满
return -1;
}
*(s1->top) = e;
s1->top++;
s1->count++;
return 0;
}
/*出栈*/
Status pop(Stack *s, ElemType *e)
{
if(s->top == -1)
{
//栈空
return -1;
}
*e = s->data[s->top];
s->top--;
return 0;
}
Status pop(Stack1*s1, ElemType *e)
{
if(s1->top == s1->base)
{
//栈空
return -1;
}
*e = *(s1->top);
s1->top--;
s->count--;
return 0;
}
/*链式栈*/
/*栈元素的(节点的结构)和栈结构的定义*/
typedef int ElemType;
typedef int Status;
/*结点的结构*/
typedef struct node
{
ElemType data;
struct node *next;
}Node;
/*栈的结构*/
typedef struct
{
struct node *top; //栈顶指针
int count; //用来记录栈元素的个数
}Stack;
/*链栈初始化*/
Status InitStack(Stack *s)
{
if(NULL == s)
{
return -1;
}
s->top = NULL; //栈空,栈顶指针指向NULL
s->count = 0;
return 0;
}
/*把链表的头指针当作栈的栈顶指针,链表的尾结点当作栈底*/
/*栈元素只在栈顶进栈或者出栈*/
/*压栈*/
Status push(Stack *s, ElemType e)
{
if(NULL == s)
{
return -1;
}
Node *p = (Node *)malloc(sizeof(Node)); //申请一个节点
if(NULL == p)
{
return -1;
}
p->data = e;
p->next = s->top; //令新创建的节点指向当前的栈顶
s->top = p; //栈顶指针指向新压栈的元素
s->count++;
return 0;
}
/*出栈*/
Status pop(Stack *s, ElemType *e)
{
if(NULL==s || NULL==s->top)
{
return -1;
}
*e = s->top->data; //取出栈顶元素的值
Node *temp = s->top; //保存当前要出栈的栈顶元素的地址
s->top = s->top->next; //将栈顶指针移向下一个元素
s->count--;
free(temp); //释放当前栈顶元素的指针
return 0;
}
/*循环队列(顺序结构)*/
#define MAXSIZE 10 //队列的大小
typedef int ElemType;
typedef int Status;
/*顺序队列结构*/
typedef struct
{
ElemType data[MAXSIZE]; //利用系统的栈来存放队列的元素
int front; //队头(出队)
int rear; //队尾(进队)
}Queue;
/*队列的初始化*/
Status InitQueue(Queue *q)
{
if(NULL == q)
{
return -1;
}
q->rear = 0;
q->front = 0;
return 1;
}
/*返回循环队列的元素个数*/
int NumQueue(Queue *q)
{
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
/*进队列(从队尾进队)*/
Status EnQueue(Queue *q, ElemType e)
{
if(NULL==q || (q->rear+1)%MAXSIZE==q->front)
{
return -1;
}
q->data[q->rear] = e;
q->rear = (q->rear+1) % MAXSIZE;
return 0;
}
/*出队列(从队头出队)*/
Status OutQueue(Queue *q, ElemType *e)
{
if(q==NULL || q->rear==q->front)
{
return -1;
}
*e = q->data[q->front];
q->front = (q->front+1) % MAXSIZE;
return 0;
}
/*用链表实现队列*/
/*队列元素的结点结构和队列结构*/
/*队列存储的元素的类型*/
typedef int ElemType;
typedef int Status;
/*结点结构*/
typedef struct node
{
ElemType data;
struct node *next;
}Node;
/*队列结构(一个队头指针,一个队尾指针)*/
typedef struct
{
struct node *front;
struct node *rear;
}Queue;
/*链式队列的初始化*/
/*无头结点*/
Status InitQueue(Queue *q)
{
if(NULL == q)
{
return -1;
}
q->front = NULL;
q->rear = NULL;
return 0;
}
/*有头结点*/
Status InitQueue(Queue *q)
{
if(NULL == q)
{
return -1;
}
/*创建一个头结点*/
Node *p = (Node *)malloc(sizeof(Node));
if(NULL == p)
{
return -1;
}
/*初始化头结点和队头队尾指针*/
p->next = NULL;
q->front = p;
q->rear = p;
return 0;
}
/*元素进队列*/
Status EnQueue(Queue *q, ElemType e)
{
if(NULLL == q)
{
return -1;
}
Node *temp = (Node *)malloc(sizeof(Node));
if(NULL == temp)
{
//申请内存失败
return -1;
}
/*初始化新插入的节点*/
temp->next = NULL;
temp->data = e;
/*从队尾连接新插入的节点并把队尾指针指向新插入的节点*/
q->rear->next = temp;
q->rear = temp;
return 0;
}
/*元素出队列*/
/*无头结点版本,从队头出队*/
Statu OutQueue(Queue *q, ElemType *e)
{
if(NULL == q || (NULL==q->rear))
{
return -1;
}
if(q->front == q->rear)
{
/*如果大家都指向同一个节点证明队列只有一个元素,那么q->rear也应该要改变*/
free(q->front);
q->front = NULL;
q->rear = NULL;
return 0;
}
Node *temp = q->front;
*e = q->front->data;
q->front = q->front->next;
free(temp);
return 0;
}
/*有头结点版本*/
Status OutQueue(Queue *q, ElemType *e)
{
if(NULL==q || (q->rear==q->front))
{
return -1;
}
Node *temp = q->front->next;
if(q->front->next == q->rear)
{
q->rear = q->front;
}
q->front->next = temp->next;
*e = temp->data;
free(temp);
return 0;
}
/*计算队列元素的数量*/
/*无头结点*/
int NumQueue(Queue *q)
{
if(NULL == q)
{
return -1;
}
int count = 1;
Node *temp1 = q->front;
Node *temp2 = q->rear;
if(temp1==NULL && temp2==NULL)
{
return 0;
}
else if(temp1 == temp2)
{
return count;
}
while(temp1 != temp2)
{
count++;
temp1 = temp1->next;;
}
return count;
}
是栈还是队列c语言实验报告怎么写,队列和栈(C语言)相关推荐
- 华北水利水电大学2012级c语言实验报告,华北水利水电大学2012级c语言实验报告(5)...
1.华北水院高级语言程序设计(C语言)实验报告(五)2012-2013学年 第二学期2012级 专业: 学号: 姓名: 一.实验题目:函数二.实验目的:(略)三.实验内容1. 程序验证(略)2程序设计 ...
- c语言实验报告第四章答案,理工大学2010C语言实验报告参考答案
理工大学2010C语言实验报告参考答案 2010C语言实验报告参考答案 实验一 熟悉C语言程序开发环境及数据描述 四.程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is lon ...
- lr1分析器c语言实验报告怎么写,编译原理课程的设计构造LR分析法语法分析器.doc...
编译原理课程的设计构造LR分析法语法分析器 太 原 学 院 课程设计报告书 课程名称 设计题目 构造LR(0)分析法语法分析器 专业班级 学 号 姓 名 指导教师 2016年 12 月 15日 目 录 ...
- C语言上机报告例文,c语言上机实验报告_大一c语言上机实验报告_c语言实验报告怎么写...
计算机的同学会进行上机实验,包括ERP,JA,C语言等等.下面是出国留学网为大家整理的上机实验心得体会,供大家参考. 上机实验心得体会(一) 通过该实验,对所学的知识有了进一步的了解.在实验的过程中, ...
- 哈工大威海c语言实验报告 第八章 无法运行程序,哈工大威海c语言实验报告.doc...
哈工大威海c语言实验报告 PAGE PAGE 25 哈工大威海c语言实验报告篇一:C语言实验报告2至4章实验2(1)#includemain(){int s=1,n;scanf("%d&qu ...
- 华北水利水电大学c语言实验报告八2020,2021年华北水利水电大学级C语言实验报告.doc...
2021年华北水利水电大学级C语言实验报告 华北水院高级语言程序设计(C语言)试验汇报(五) -- 第二学期 级 专业: 学号: 姓名: ------------------------------- ...
- c语言实验报告实验要求,c语言实验报告格式要求.doc
c语言实验报告格式要求.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...
- c语言实验报告管理系统,C语言实验报告-学生信息资管理系统.doc
C语言实验报告-学生信息资管理系统 C语言实验报告 院系: 数学与计算科学学院 班级: 信息与计算科学2班 姓名: 学号: 2011年12月21日 一.问题描述 编写一个信息管理系统,包括姓名.性别. ...
- 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...
周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...
最新文章
- 只需 9.9 元!前 Facebook 工程师 7 天带你掌握 7 大数据结构,大厂面试必备!
- docker 嵌套技术 docker outside of docker 可用于一个容器内调用另一个容器内程序 跨容器调用 docker容器内获取自身容器信息
- ubuntu字符界面login_Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法...
- 如何为Oracle配置多个监听器
- 给 ListBox 的 DataTemplate 模板中的 元素设置动画
- 基于主特征空间相似度计算的切分算法及切分框架
- leecode第二百一十七题(存在重复元素)
- 一个类windows系统的效果图
- 真人发音计算机在线用,文字转语音真人发声在线怎么转换?这种操作最简单
- 数据外推算法 c语言,[原创]如何进行内插法和外推法的计算
- SAP中内部订单状态对结算的影响分析测试
- 安装mantis 2.14
- 【004】VS2017配置OpenCV4.1.0
- 微信小程序注册提示邮箱已被占用
- Ubuntu16.04安装steam
- 微信小程序支付绑定商户号问题
- 程序员应如何提高系统分析能力(转)
- 记一次python考试题
- X书x-mini-sig_x-mini-mua
- appinventor飞机大战案例_APPInventor实例及讲解
热门文章
- PHP抽象类abstract关键字
- SQL中left join、right join、inner join的区别
- python os模块方法_python os模块的常用方法
- python列表生成多个号码_python按需生成固定数量电话号码并保存为excel(不重复)...
- ds18b20温度转换指令_【Proteus】DS18B20简易温控器
- mysql查询建表SQL语句
- java序列化如何实现_Java实现序列化与反序列化的简单示例
- webspere php,Project Zero、WebSphere sMash、PHP和JAVA的整合
- html 保存xlsx,HTML SaveXLSX按钮防止将数据保存到SlickGrid的XLSX文件中
- 安装深度linux无法引导,安装deepin无法引导,求教!