数据结构中栈与队列的c语言代码实现

用一个简单的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
#include
//#include 
#include
#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;
}

你可能感兴趣的:(数据结构)