您的位置:首页 > 理论基础 > 数据结构算法

数据结构中栈与队列的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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: