考研数据结构-栈

考研数据结构-栈

1.结构

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define INITSIZE 20
#define INSERTMENT 10

typedef char ElemType;
typedef struct{
	ElemType *base;			//栈底指针
	ElemType *top;			//栈顶指针
	int stacksize;
}sqStack;

2.初始化

void initStack(sqStack *s){
	s->base=(ElemType *)malloc(INITSIZE*sizeof(ElemType));		//开辟栈空间
	if(!s->base) exit(0);
	s->top=s->base;
	s->stacksize=INITSIZE;
}

3.入栈

void push(sqStack *s,ElemType e){
	if(s->top - s->base >= s->stacksize){			//栈满,追加空间
		s->base=(ElemType *)realloc(s->base,(s->stacksize+INSERTMENT)*sizeof(ElemType));
		if(!s->base)	exit(0);			//分配失败
		s->top=s->base+s->stacksize;
		s->stacksize=s->stacksize+INSERTMENT;
	}
	*(s->top)=e;
	s->top++;
}

4.出栈

void pop(sqStack *s,ElemType *e){
	if(s->top==s->base) return;
	*e=*--(s->top);
	
}

5.获取栈长

int StackLen(sqStack s){
	return (s.top - s.base);			//什么时候用指针什么时候用箭头  sqStack s(s.xxx)		sqStack *s(s->xxx)
}

6.销毁栈

void destroyStack(sqStack *s){
	free(s->base);
	s->base = s->top = NULL;
	s->stacksize=0;
}

7.测试代码

int main() {
	ElemType c;
	sqStack s;
	int len,i;
	int sum=0;
	printf("请输入二进制数字,#结尾:");
	initStack(&s);
	scanf("%c",&c);
	while(c!='#'){
		push(&s,c);
		scanf("%c",&c);
	}
	getchar();
	len = StackLen(s);
	for(i=0;i<len;i++){
		pop(&s, &c);
		printf("c:%c\n",c);
		sum=sum+(c-48)*pow(2,i);		//转化为十进制
	}
	printf("十进制为:%d\n",sum);
	destroyStack(&s);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章