第五周实践项目6 数制转换(栈)
生活随笔
收集整理的這篇文章主要介紹了
第五周实践项目6 数制转换(栈)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
*Copyright (c) 2017,煙臺大學計算機與控制工程學院
*All rights reserved.
*文件名稱:項目6-把十進制的整數轉換為任一進制數輸出。提示:要轉換為r進制,則原來的數逐次除以基數r(除完之后用商再除),直到商為0,得到的一系列余數的逆序就是轉換結果。這里的“逆序”,意味著后產生的余數,會先輸出,后進先出,棧的機會來了……
*作 者:邵雪源
*完成日期:2017年12月13日
*版 本 號:v1.0
*/
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct linknode
{ElemType data; //數據域struct linknode *next; //指針域
} LiStack; //鏈棧類型定義
void InitStack(LiStack *&s) //初始化棧
{s=(LiStack *)malloc(sizeof(LiStack));s->next=NULL;
}
void DestroyStack(LiStack *&s) //銷毀棧
{LiStack *p=s->next;while (p!=NULL){free(s);s=p;p=p->next;}free(s); //s指向尾結點,釋放其空間
}
int StackLength(LiStack *s) //返回棧長度
{int i=0;LiStack *p;p=s->next;while (p!=NULL){i++;p=p->next;}return(i);
}
bool StackEmpty(LiStack *s) //判斷棧是否為空
{return(s->next==NULL);
}
void Push(LiStack *&s,ElemType e) //入棧
{LiStack *p;p=(LiStack *)malloc(sizeof(LiStack));p->data=e; //新建元素e對應的節點*pp->next=s->next; //插入*p節點作為開始節點s->next=p;
}
bool Pop(LiStack *&s,ElemType &e) //出棧
{LiStack *p;if (s->next==NULL) //棧空的情況return false;p=s->next; //p指向開始節點e=p->data;s->next=p->next; //刪除*p節點free(p); //釋放*p節點return true;
}
bool GetTop(LiStack *s,ElemType &e) //取棧頂元素
{if (s->next==NULL) //棧空的情況return false;e=s->next->data;return true;
}
void DispStack(LiStack *s) //輸出棧中元素
{LiStack *p=s->next;while (p!=NULL){printf("%c ",p->data);p=p->next;}printf("\n");
}
void MultiBaseOutput (int number,int base)
{//假設number是非負的十進制整數,輸出等值的base進制數int i;LiStack *S;InitStack(S);while(number) //從右向左產生base進制的各位數字,并將其進棧{Push(S,number%base); //將將余數進棧number/=base;}while(!StackEmpty(S)) //棧非空時退棧輸出{Pop(S, i);printf("%d",i);}
}
int main()
{MultiBaseOutput(10, 2);return 0;
}
總結
以上是生活随笔為你收集整理的第五周实践项目6 数制转换(栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四周实践项目8 C++标准模板库与数据
- 下一篇: 第五周实践项目7 后缀表达式