数据结构中栈与队列的c语言代码实现
2014-08-14 15:21
866 查看
用一个简单的c语言例子,用代码实现栈与队列的各种代码。
进制转换
十进制N和其他d进制数的转换原理:
N=( N div d )*d + N mod d
其中:div为整除运算,mod为求余运算
例如:(1348)10=(2504)8,其运算过程如下:
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
以下为代码:
#include<stdio.h>
#include<stdlib.h>
//#include<malloc.h>
#include<conio.h>
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
//typedef int SElemmType; //定义栈类型
typedef struct //定义顺序栈
{
int *base; //在栈构造之前和销毁之后 base的值为NULL
int *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
int InitStack(SqStack &S) //构造一个空栈
{
S.base=(int *)malloc(sizeof(int)*(STACK_INIT_SIZE));
if(!S.base)
exit (-1); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int DestroyStack(SqStack &S) //销毁栈
{
free(S.base); //释放S
S.base=0;
S.top=0;
S.stacksize=0;
return 1;
}
int ClearStack(SqStack &S) //设置空栈
{
S.top=S.base;
return 1;
}
int StackEmpty(SqStack S) //判断是否为空栈
{
if(S.top==S.base)
return 1;
else
return 0;
}
int StackLength(SqStack S) //返回栈的长度
{
return S.top-S.base;
}
int GetTop(SqStack S,int &e) //若栈不为空 ,返回栈顶元素
{
if(S.top>S.base)
{
e=*(S.top-1);
return 1;
}
else
return 0;
}
int Push(SqStack &S,int e) //插入元素 e 为栈的新元素
{
if(S.top-S.base>=S.stacksize) //栈满 追加存储空间
{
S.base=(int *)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(int));
if(!(S.base))
exit (-1); //存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S,int &e) //若栈不为空,删除栈顶元素用 e 返回其值
{
if(S.top==S.base)
return 0;
e=*--S.top;
return 1;
}
//int StackTraverse(SqStack &S,int e) // 从栈顶到栈底依次对栈中的元素调用函数
//{
// while(S.top>S.base)
// visit(*S.base++);
//}
void conversion()//将十进制用栈转化为八进制
{
SqStack S;
int N;
int e;
InitStack(S);
printf("输入N的值:");
scanf("%d",&N);
printf("转换后的值:");
while(N)
{
Push(S, N % 8);
N = N/8;
}
while(!StackEmpty(S))
{
Pop(S,e);
printf(" %d",e);
}
}
int main()
{
conversion();
getch();
system("pause");
return 0;
}
进制转换
十进制N和其他d进制数的转换原理:
N=( N div d )*d + N mod d
其中:div为整除运算,mod为求余运算
例如:(1348)10=(2504)8,其运算过程如下:
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
以下为代码:
#include<stdio.h>
#include<stdlib.h>
//#include<malloc.h>
#include<conio.h>
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
//typedef int SElemmType; //定义栈类型
typedef struct //定义顺序栈
{
int *base; //在栈构造之前和销毁之后 base的值为NULL
int *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
int InitStack(SqStack &S) //构造一个空栈
{
S.base=(int *)malloc(sizeof(int)*(STACK_INIT_SIZE));
if(!S.base)
exit (-1); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int DestroyStack(SqStack &S) //销毁栈
{
free(S.base); //释放S
S.base=0;
S.top=0;
S.stacksize=0;
return 1;
}
int ClearStack(SqStack &S) //设置空栈
{
S.top=S.base;
return 1;
}
int StackEmpty(SqStack S) //判断是否为空栈
{
if(S.top==S.base)
return 1;
else
return 0;
}
int StackLength(SqStack S) //返回栈的长度
{
return S.top-S.base;
}
int GetTop(SqStack S,int &e) //若栈不为空 ,返回栈顶元素
{
if(S.top>S.base)
{
e=*(S.top-1);
return 1;
}
else
return 0;
}
int Push(SqStack &S,int e) //插入元素 e 为栈的新元素
{
if(S.top-S.base>=S.stacksize) //栈满 追加存储空间
{
S.base=(int *)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(int));
if(!(S.base))
exit (-1); //存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S,int &e) //若栈不为空,删除栈顶元素用 e 返回其值
{
if(S.top==S.base)
return 0;
e=*--S.top;
return 1;
}
//int StackTraverse(SqStack &S,int e) // 从栈顶到栈底依次对栈中的元素调用函数
//{
// while(S.top>S.base)
// visit(*S.base++);
//}
void conversion()//将十进制用栈转化为八进制
{
SqStack S;
int N;
int e;
InitStack(S);
printf("输入N的值:");
scanf("%d",&N);
printf("转换后的值:");
while(N)
{
Push(S, N % 8);
N = N/8;
}
while(!StackEmpty(S))
{
Pop(S,e);
printf(" %d",e);
}
}
int main()
{
conversion();
getch();
system("pause");
return 0;
}
相关文章推荐
- 数据结构C语言实现之链式队列的6种算法代码
- 数据结构 - 队列简介 及 1个简单的c语言链式队列代码实现
- 数据结构 --静态队列的一个简单的C语言代码实现
- 数据结构 10 队列 不使用代码复用 提高效率的实现
- (C语言队列的顺序实现(数据结构十)
- 数据结构C语言实现系列——队列
- (C语言队列的顺序实现(数据结构十)
- 数据结构C语言实现系列——队列
- 数据结构C语言实现系列——队列
- 数据结构C语言实现系列——队列
- 数据结构 09 队列 代码复用的实现
- (C语言)队列的链式实现(数据结构十一)
- 严蔚敏 数据结构 二叉树 代码C语言实现 用C++编译器运行
- 数据结构:循环队列(C语言实现)
- 数据结构循环队列斐波拉契数列的实现(c语言)
- [数据结构]程杰队列的链式存储结构及实现代码
- C++类模板 实现队列的链式存储结构算法 《数据结构》(北京科海) 部分代码摘抄,自己编写运行
- 数据结构C语言实现—队列操作
- 数据结构实现链式队列(C语言)
- 优先队列(priority_queue)的C语言实现代码