国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu):利用棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu):利用棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

數(shù)制轉(zhuǎn)換

從鍵盤(pán)輸入一個(gè)十進(jìn)制數(shù)n,并輸入要轉(zhuǎn)換的進(jìn)制數(shù)m,利用棧將n轉(zhuǎn)換成m進(jìn)制,并輸出轉(zhuǎn)換后的結(jié)果。

首先設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的主菜單程序,然后再為這些菜單項(xiàng)配上相應(yīng)的功能。

主菜單設(shè)計(jì)要求:

程序運(yùn)行后,顯示一個(gè)標(biāo)題“進(jìn)制轉(zhuǎn)換”,標(biāo)題下方給出4個(gè)菜單項(xiàng)的內(nèi)容和輸入提示:

  1. 輸入一個(gè)十進(jìn)制數(shù)n
  2. 輸入進(jìn)制轉(zhuǎn)換m
  3. 進(jìn)制轉(zhuǎn)換
  4. 繼續(xù)否?(y/n)

請(qǐng)選擇1—4:

功能要求:

完成各菜單的要求,能用棧正確轉(zhuǎn)換數(shù)制

棧是限定僅在表尾進(jìn)行插入或刪除操作的線性表,后進(jìn)先出

特別注意:

進(jìn)行進(jìn)制轉(zhuǎn)換時(shí)要考慮十六進(jìn)制的特殊性,為完成十進(jìn)制與十六進(jìn)制間的轉(zhuǎn)換利用if語(yǔ)句,對(duì)e的值進(jìn)行判斷:

當(dāng)e大于10時(shí),為保證十六進(jìn)制正確轉(zhuǎn)換:

當(dāng)e的值等于11時(shí),輸出A;

當(dāng)e的值等于12時(shí),輸出B;

當(dāng)e的值等于13時(shí),輸出C;

當(dāng)e的值等于14時(shí),輸出D;

當(dāng)e的值等于15時(shí),輸出E;

流程圖:

利用棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),算法


?

實(shí)驗(yàn)代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730061.html

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100                               //順序棧存儲(chǔ)空間的初始分配量
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;


//順序棧的存儲(chǔ)結(jié)構(gòu)
typedef struct{
	SElemType *base;                                      //棧底指針
	SElemType *top;                                       //棧頂指針
	int stacksize;                                        //棧可用的最大容量
}SqStack;


//順序棧的初始化
Status InitStack(SqStack &S)                                           //構(gòu)建一個(gè)空棧S
{
	S.base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));    //為順序棧動(dòng)態(tài)分配一個(gè)容量為STACK_INIT_SIZE的數(shù)組空間 
	if(!S.base)
		exit (OVERFLOW);                                               //存儲(chǔ)分配失敗
	S.top = S.base;                                                    //top初始為base,空棧
	S.stacksize = STACK_INIT_SIZE;                                     //stacksize置為棧的最大容量STACK_INIT_SIZE
	return OK;
}


//順序棧的入棧
Status Push(SqStack &S,SElemType e)
{                                             
	if(S.top - S.base == S.stacksize ){
		S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));     //棧滿(mǎn),追加存儲(chǔ)空間
	if(!S.base)
		return OVERFLOW;                                               //存儲(chǔ)分配失敗
	S.top=S.base +S.stacksize;
	S.stacksize+=STACKINCREMENT;
	}
	*S.top++ = e;                                                      //元素e壓入棧頂,棧頂指針加一
	return OK;
}


//順序棧的出棧
Status Pop(SqStack &S,SElemType &e)                            //         
{
	
	if(S.top==S.base)
		return ERROR;                                          //???,返回ERROR
	e = *--S.top;                                              //棧頂指針減一,將棧頂元素賦給e
	return e;
}


//主函數(shù)
int main()
{
	int choice;
	char c;
	int n,m;
	SElemType e;
	SqStack S;
	InitStack(S);
	printf("**********進(jìn)制轉(zhuǎn)換**********\n");
	printf("1.請(qǐng)輸入一個(gè)十進(jìn)制數(shù)n\n");
	printf("2.請(qǐng)輸入轉(zhuǎn)換的進(jìn)制m\n");
	printf("3.進(jìn)制轉(zhuǎn)換\n");
	printf("4.繼續(xù)或退出(y/n)\n");
	while(choice)                                          //保證操作的選擇循環(huán)進(jìn)行
	{
		printf("請(qǐng)選擇操作1--4:\n");
		scanf("%d",&choice);
		if(choice >4 ||choice<=0)                          //如果輸入的操作數(shù)不符合條件,則退出程序
		{
			printf("您輸入的數(shù)據(jù)有誤!\n");
			return 0;                                      //返回0,結(jié)束循環(huán),退出程序
		}
		while(choice <= 4)                                 //進(jìn)行操作1--4的選擇
		{
			if(choice == 1)                               
			{
				printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):\n");
				scanf("%d",&n);
				break;
			}
			if(choice == 2)
			{
				printf("請(qǐng)輸入轉(zhuǎn)換的進(jìn)制:\n");
				scanf("%d",&m);
				break;
			}
			if(choice == 3)
			{
				printf("進(jìn)制轉(zhuǎn)換:\n");
				while(n!=0)
				{
					Push(S,n%m);
					n=n/m;
				}
				while(S.top!=S.base)
				{
					e=Pop(S,e);
					if(e<10)
						printf("%d",e);
					else if(e>=10)
					{
						if(e==10)
							printf("A");
						if(e==12)
							printf("B");
						if(e==13)
							printf("C");
						if(e==14)
							printf("D");
						if(e==15)
							printf("E");
					}
				}
				printf("\n");
				break;
			}
			if(choice == 4)
			{
				printf("請(qǐng)輸入y/n選擇繼續(xù)或退出\n");
				getchar();
				scanf("%c",&c);
				if(c=='y')
				{
					printf("請(qǐng)輸入操作1--4繼續(xù)運(yùn)行程序:\n");
					scanf("%d",&choice);
				}
				if(c == 'n')
					return 0;                                     //返回0,結(jié)束循環(huán),退出程序
			}
		}
	}
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu):利用棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包