栈的C语言实现
来源:互联网 发布:网络运维在做什么 编辑:程序博客网 时间:2024/05/01 16:21
栈的C语言实现
队列的C语言实现
栈:后进先出 允许插入和删除的一端叫栈顶top 不允许的一端叫栈底bottom
主要操作:进栈、出栈、判断栈满和栈空
有两个现成的函数 int push(int s[],int x,int *ptop), int pop(int s[],int *py,int *ptop) 直接拿过来用就行 要压入的栈空间 要进栈的数 栈顶指针
队列:先进先出 允许插入的叫队尾rear 允许数据离开的叫队头front
主要操作:入队、出队、判断队满和队空
有两个现成的函数 int EnQueue(int *Q,int x,int *pf,int *pr) pf:队头指针
直接拿过来用就行 int DeQueue(int *Q,int *py,int *pf,int *pr) pr:队尾指针
Q:要进入的队空间 x:要进入队的数 py:要出队的数
(a) 线性队列
(b) 循环队列
队头:
front
队尾:
rear
队满条件:
(rear+1)%MAX=front
队空条件:
rear=front
入队:rear = (rear+1)%MAX
出队:front = (front+1)%MAX
习题答案
1、
//进栈算法
#include "stdio.h"
#define stacksize 100 /*定义stacksize为常数100 */
int push(int s[],int x,int *ptop)
{
int top;
top=*ptop; //ptop是指针变量;*ptop获得实际栈顶指针
if ( top==stacksize ) //栈满
{
printf("overflow\n");
return 0;
}
else
{
s[top]=x;
top++;
*ptop=top; //实际栈顶指针加1,返回到调用函数处
return 1;
}
}
int pop(int s[],int *py,int *ptop)
{
int top;
top=*ptop; //ptop是指针变量;*ptop获得实际栈顶指针
if (top==0) //栈空
{
printf("stack empty\n");
return 0;
}
else
{
--top;
*py=s[top]; //实际栈顶指针减1,返回到调用函数处
*ptop=top;
return 1;
}
}
int main()
{
static int s[stacksize];
int top=0,result,y;
int i;
result=push(s,11,&top); //将11压进栈中
result=push(s,22,&top); //将22压进栈中
result=push(s,33,&top); //将33压进栈中
printf("top=%d\n",top);
for (i=0;i<3;i++)
{
result=pop(s,&y,&top); //从栈中弹出
printf("top=%d,y=%d\n",top,y);
}
}
2、
//循环队列中加入一个元素的算法:
//设Q[MAX]表示循环队列
#define MAX 7
#include "stdio.h"
int EnQueue(int *Q,int x,int *pf,int *pr)
{
int front,rear;
front = *pf;
rear=*pr;
if ( (rear+1) % MAX == front ) //判断队满
return 0;
else
{
Q[rear]=x; //将数据存入队列
rear = ( rear+1 ) % MAX; //队尾指针移位
*pr=rear; //保存队尾指针
return 1;
}
}
int DeQueue(int *Q,int *py,int *pf,int *pr)
{
int front,rear;
front=*pf;
rear=*pr;
if (front==rear) //判断队空
return 0;
else
{
*py=Q[front]; //将数据读出
front=(front+1) % MAX; //队头指针移动
*pf=front; //保存队头指针
return 1;
}
}
int main()
{
static int s[MAX];
int rear = 0,front = 0;
int b=0;
EnQueue(s,11,&front,&rear); //入队操作
printf("front=%d,rear=%d\n",front,rear);
EnQueue(s,12,&front,&rear); //入队操作
printf("front=%d,rear=%d\n",front,rear);
EnQueue(s,13,&front,&rear); //入队操作
printf("front=%d,rear=%d\n",front,rear);
printf("***********\n");
DeQueue(s,&b,&front,&rear); //出队操作
printf("front=%d,rear=%d\n",front,rear);
printf("**%d**\n",b);
DeQueue(s,&b,&front,&rear); //出队操作
printf("front=%d,rear=%d\n",front,rear);
printf("**%d**\n",b);
DeQueue(s,&b,&front,&rear); //出队操作
printf("front=%d,rear=%d\n",front,rear);
printf("**%d**\n",b);
}
队列的C语言实现
栈:后进先出 允许插入和删除的一端叫栈顶top 不允许的一端叫栈底bottom
主要操作:进栈、出栈、判断栈满和栈空
有两个现成的函数 int push(int s[],int x,int *ptop), int pop(int s[],int *py,int *ptop) 直接拿过来用就行 要压入的栈空间 要进栈的数 栈顶指针
队列:先进先出 允许插入的叫队尾rear 允许数据离开的叫队头front
主要操作:入队、出队、判断队满和队空
有两个现成的函数 int EnQueue(int *Q,int x,int *pf,int *pr) pf:队头指针
直接拿过来用就行 int DeQueue(int *Q,int *py,int *pf,int *pr) pr:队尾指针
Q:要进入的队空间 x:要进入队的数 py:要出队的数
(a) 线性队列
(b) 循环队列
队头:
front
队尾:
rear
队满条件:
(rear+1)%MAX=front
队空条件:
rear=front
入队:rear = (rear+1)%MAX
出队:front = (front+1)%MAX
习题答案
1、
//进栈算法
#include "stdio.h"
#define stacksize 100 /*定义stacksize为常数100 */
int push(int s[],int x,int *ptop)
{
int top;
top=*ptop; //ptop是指针变量;*ptop获得实际栈顶指针
if ( top==stacksize ) //栈满
{
printf("overflow\n");
return 0;
}
else
{
s[top]=x;
top++;
*ptop=top; //实际栈顶指针加1,返回到调用函数处
return 1;
}
}
int pop(int s[],int *py,int *ptop)
{
int top;
top=*ptop; //ptop是指针变量;*ptop获得实际栈顶指针
if (top==0) //栈空
{
printf("stack empty\n");
return 0;
}
else
{
--top;
*py=s[top]; //实际栈顶指针减1,返回到调用函数处
*ptop=top;
return 1;
}
}
int main()
{
static int s[stacksize];
int top=0,result,y;
int i;
result=push(s,11,&top); //将11压进栈中
result=push(s,22,&top); //将22压进栈中
result=push(s,33,&top); //将33压进栈中
printf("top=%d\n",top);
for (i=0;i<3;i++)
{
result=pop(s,&y,&top); //从栈中弹出
printf("top=%d,y=%d\n",top,y);
}
}
2、
//循环队列中加入一个元素的算法:
//设Q[MAX]表示循环队列
#define MAX 7
#include "stdio.h"
int EnQueue(int *Q,int x,int *pf,int *pr)
{
int front,rear;
front = *pf;
rear=*pr;
if ( (rear+1) % MAX == front ) //判断队满
return 0;
else
{
Q[rear]=x; //将数据存入队列
rear = ( rear+1 ) % MAX; //队尾指针移位
*pr=rear; //保存队尾指针
return 1;
}
}
int DeQueue(int *Q,int *py,int *pf,int *pr)
{
int front,rear;
front=*pf;
rear=*pr;
if (front==rear) //判断队空
return 0;
else
{
*py=Q[front]; //将数据读出
front=(front+1) % MAX; //队头指针移动
*pf=front; //保存队头指针
return 1;
}
}
int main()
{
static int s[MAX];
int rear = 0,front = 0;
int b=0;
EnQueue(s,11,&front,&rear); //入队操作
printf("front=%d,rear=%d\n",front,rear);
EnQueue(s,12,&front,&rear); //入队操作
printf("front=%d,rear=%d\n",front,rear);
EnQueue(s,13,&front,&rear); //入队操作
printf("front=%d,rear=%d\n",front,rear);
printf("***********\n");
DeQueue(s,&b,&front,&rear); //出队操作
printf("front=%d,rear=%d\n",front,rear);
printf("**%d**\n",b);
DeQueue(s,&b,&front,&rear); //出队操作
printf("front=%d,rear=%d\n",front,rear);
printf("**%d**\n",b);
DeQueue(s,&b,&front,&rear); //出队操作
printf("front=%d,rear=%d\n",front,rear);
printf("**%d**\n",b);
}
0 0
- 栈的C语言实现
- 栈的C语言实现
- C语言栈的实现
- 栈的C语言实现
- 栈的C语言实现
- 栈的c语言实现
- 栈的C语言实现
- 栈的c语言实现
- c语言栈的实现
- 栈的实现(C语言实现)
- 顺序栈的C语言实现
- 顺序栈的实现(C语言)
- C语言实现堆栈(栈)的数据结构
- 用c语言实现的链式栈
- 顺序栈的C语言实现
- C语言,简单栈的实现 Stack
- C语言 ----- 动态栈的算法实现
- 顺序栈的实现C语言
- 简单区分iphone和ipad的宏定义
- PyQt4 tutorial读书笔记(1)基础篇
- Linux——windows访问Linux共享的文件
- hive创建四种表
- Android系统通知Notification
- 栈的C语言实现
- 2014年框架类源码年度精品汇总
- 【Cocos2d-x游戏引擎开发笔记(23)】多线程以及线程同步
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
- HDU 3519解题报告
- oracle insert select语句
- java swing 界面开发实战
- 【Cocos2d-x游戏引擎开发笔记(24)】CURL实现get和post联网
- (转载)Android性能优化典范