第一個(gè)作業(yè)是:數(shù)值轉(zhuǎn)換
-------------------------------------------------------------------
/*堆棧的一個(gè)應(yīng)用,來進(jìn)行數(shù)值的轉(zhuǎn)換*/
#include "stdio.h"
#define MAXSIZE 50
struct Stack{
int top;
int sLink[MAXSIZE];
};
struct Stack *initStack()
{struct Stack *tem;
if((tem=(struct Stack*)malloc(sizeof(struct Stack)))==NULL)
{printf("系統(tǒng)無法分配空間.");
exit(1);
}
else
{tem->top=0;
tem->sLink[tem->top]=-1;
}
return tem;
}
void push(struct Stack *stack,int item)
{if(stack->top==MAXSIZE-1)
{printf("棧滿");
exit(1);
}
else
{stack->top++;
stack->sLink[stack->top]=item;
}
}
int pop(struct Stack *stack)
{int tem;
if(stack->top==0)
{printf("棧為空");
exit(1);
}
else{
tem=stack->sLink[stack->top];
stack->top--;
}
return tem;
}
void coversion(int k,struct Stack *stack)
{printf("開始轉(zhuǎn)換\n轉(zhuǎn)換為八進(jìn)制的結(jié)果為:");
while(k)
{push(stack,k%8);
k=k/8;
}
while(stack->top)
printf("%d",pop(stack));
printf("\n數(shù)值轉(zhuǎn)換結(jié)束\n");
}
void main()/*主程序運(yùn)行,來將66轉(zhuǎn)換成為八進(jìn)制*/
{struct Stack *stack;
int k=0;
printf("請(qǐng)輸入需要轉(zhuǎn)換的數(shù)字:");
scanf("%d",&k);
stack=initStack();
coversion(k,stack);
printf("Done.");
}
運(yùn)行情況:
E:\work\workspace1016\myc\Release>myc
請(qǐng)輸入需要轉(zhuǎn)換的數(shù)字:99
開始轉(zhuǎn)換
轉(zhuǎn)換為八進(jìn)制的結(jié)果為:143
數(shù)值轉(zhuǎn)換結(jié)束
Done.
-------------------------------------------------------------------
第二個(gè)是匹配:
-------------------------------------------------------------------
//在g++上調(diào)試通過
#include "stdio.h"
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
//定義順序堆棧
#define STACK_SIZE 100 //存儲(chǔ)空間初始分配量
#define STACK_INC 10 //存儲(chǔ)空間分配增量
typedef char Elem;
typedef struct{
Elem *base; //棧底指針
Elem *top; //棧頂指針
int size; //當(dāng)前已分配的存儲(chǔ)空間
}SqStack;
typedef int Status;
//創(chuàng)建空堆棧,棧頂指針和棧底指針相等時(shí),棧為空
Status CreatStack(SqStack &S)
{
S.base=(Elem *)malloc(STACK_SIZE*sizeof(Elem));
S.top=S.base;
S.size=STACK_SIZE;
return OK;
}
//堆棧是否為空
Status StackEmpty(SqStack S){
if(S.top!=S.base) return ERROR;
return OK;
}
//進(jìn)棧
Status Push(SqStack &S,Elem e){
if(S.top-S.base>=S.size){ //棧滿,追加存儲(chǔ)空間
S.base=(Elem *)realloc(S.base,(S.size+STACK_INC)*sizeof(Elem));
S.top=S.base+S.size;
S.size+=STACK_INC;
}
*S.top=e;
S.top+=1;
return OK;
}
//出棧
Status Pop(SqStack &S,Elem &e){
if(S.top==S.base) return ERROR;
S.top-=1;
e=*S.top;
return OK;
}
//括號(hào)匹配
Status Bracket(SqStack &S,char *str){
int i=0,flag1=0,flag2;
Elem e;
while(str[i]!='\0'){
switch(str[i]){
case '(':Push(S,'(');break; //'('進(jìn)棧
case '[':Push(S,'[');break; //'['進(jìn)棧
case ')':{Pop(S,e);
if(e!='(') flag1=1; break;} //出棧,判斷是否為'('
case ']':{Pop(S,e);
if(e!='[') flag1=1;break;} //出棧,判斷是否為'['
default: break;
}
if(flag1) break; //出現(xiàn)不匹配,立即結(jié)束循環(huán)
i++;
}
flag2=StackEmpty(S); //flag2判斷堆棧是否為空
if(!flag1 && flag2) printf("括號(hào)匹配!\n");
else printf("括號(hào)不匹配!\n");
return OK;
}
//主函數(shù)
int main()
{
char temp,flag='y';
while(flag=='y'){
char str[255];
SqStack S;
printf("請(qǐng)輸入字符串:");
scanf("%s",str);
scanf("%c",&temp); //接受輸入的回車鍵
CreatStack(S);
Bracket(S,str);
cout<<"你想再試一次嗎(按y繼續(xù)): "<<endl;
scanf("%c",&flag);
printf("\n");
}
printf("程序結(jié)束.\n");
return 0;
}
-------------------------------------------------------------------