数据结构-栈构建与操作

顺序栈

#include<stdio.h>
#include<stdlib.h>
#define max_size 10

//抽象数据类型 
typedef struct stack{
	int *a;
	int top;
} stack;

//判空 
int Empty(stack *L){
	return (L->top == -1);
} 

//判满 
int Full(stack *L){
	return (L->top == max_size);
}

//初始化栈 
void initStack(stack *L){
	L->a = (int *)malloc(sizeof(int) * max_size);
	L->top = -1;
}

//入栈 
int push(stack *L,int elem){
	L->a[(++L->top)] = elem;
} 


//出栈/输出 
int pop(stack *L){
	int length = L->top+1;
	if(Empty(L)){
		printf("Error\n");
		return 1;
	}
	for(int i=0;i<length;i++){
		printf("%5d",L->a[(L->top--)]);
	}
	printf("\n");
	return 0;
} 

//十六进制进制输出
int pop_change(stack *S){
	int length = S->top+1;
	int j = 0;
	if(Empty(S)){
		printf("Error\n");
		return 1;
	}
	for(int i=0;i<length;i++){
		if(S->a[S->top] == 10) printf("A");
		else if(S->a[S->top] == 11) printf("B");
		else if(S->a[S->top] == 12) printf("C");
		else if(S->a[S->top] == 13) printf("D");
		else if(S->a[S->top] == 14) printf("E");
		else if(S->a[S->top] == 15) printf("F");
		else printf("%d",S->a[S->top]);
		S->top--; 
	}
	printf("\n");
	return 0;
} 

//进制转换
int change(int n,int m){
	stack S;
	initStack(&S);
	while(n != 0){
			push(&S,n%m);
			n = n/m;
	} 
	if(m<9) pop(&S);
	else pop_change(&S);
	return 0;
}

int main(){
	stack L;
	initStack(&L);
	if(Full(&L)) return 0;
	if(Empty(&L)){
		for(int i = 0;i<max_size; i++){
			push(&L,i);
		}
	}
	pop(&L);
	change(3456,16);
} 



/*
int change(stack *S,int n,int m){
	while(n != 0){
		S->a[(++S->top)] = n%m;
		n = n/m;
	} 
	return 0;
}
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值