/*-----------------------1-4.c-------------------------------*/
#include "stdio.h"
#include "malloc.h"
#include <process.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef char ElemType;
typedef struct sqstack{
ElemType *base;
ElemType *top;
int stacksize;
}sqStack;
void InitStack(sqStack *s){
s ->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!s ->base) exit(0);
s ->top = s ->base;
s ->stacksize = STACK_INIT_SIZE;
}
void Push(sqStack *s, ElemType e){
if(s ->top - s ->base >= s ->stacksize){
s ->base = (ElemType *)realloc(s ->base, (s ->stacksize + STACK_INCREMENT * sizeof(ElemType)));
if(!s ->base)exit(0);
s ->stacksize = s ->stacksize;
}
*s ->top = e;
s ->top++;
}
void Pop(sqStack *s, ElemType *e){
if(s ->top == s ->base)exit(0);
*e = *--(s ->top);
}
int GetLenStack(sqStack *s){
return(s ->top - s ->base);
}
void ClearStack(sqStack *s){
s ->top = s ->base;
}
void DeleteStack(sqStack *s){
int i, len;
len = s ->stacksize;
for(i = 0; i < len; i++){
free(s ->base);
s ->base++;
}
s ->base = s ->top = NULL;
s ->stacksize = 0;
}
void main(){
sqStack m_stack;
ElemType c;
int i, len, result;
InitStack(&m_stack);
printf("please input a binary digit,end with '#':\n");
scanf("%c",&c);
while(c != "#")
{
Push(&m_stack, c);
scanf("%c",&c);
}
getchar();
len = GetLenStack(&m_stack);
for(i = 0; i < len; i++)
{
Pop(&m_stack, &c);
result += (c - 48) * pow(2, i);
}
printf("Dicimal is :%d", result);
getche();
}
堆栈的c 语言实现
最新推荐文章于 2024-07-23 21:59:03 发布