十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
C语言中包含一些标准的库函数,但是没有像C++中的STL容器那部分全面的结构和函数。
创新互联建站专注于连山网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供连山营销型网站建设,连山网站制作、连山网页设计、连山网站官网定制、重庆小程序开发公司服务,打造连山网络公司原创品牌,更为您提供连山网站排名全网营销落地服务。
在C语言中如果想使用栈,需要自己编写代码,如果是简单的一次性应用,可以用数组模拟栈的功能,如果是在一个大项目中反复使用,可以自己写一个stack的库函数。
自定义的库函数中,至少应该包含初始化、销毁、入栈、出栈、取栈顶元素、判断栈是否为空等操作。
我帮你写了InitStack和StackEmpty函数,程序最终结果如下:
#define maxnum 20
#includestdio.h
#includestdlib.h
struct stacktype
{
int stack[maxnum];
int top;
};
struct stacktype *S;//顶一个堆栈
int push(struct stacktype *s,int x)
{
if(s-top=maxnum-1)
return false;
else
s-top++;
s-stack[s-top]=x;
return true;
}
int pop(struct stacktype *s)
{
if(s-top 0)
return NULL;
else
s-top--;
return(s-stack[s-top+1]);
}
//初始化堆栈
void InitStack(struct stacktype* S)
{
S = (struct stacktype *)malloc(sizeof(struct stacktype));
S-top = -1;
}
//判断堆栈是否为空
bool StackEmpty(struct stacktype *S)
{
if (S-top 0)
{
return true;
}
return false;
}
void dec_to_bin(int n,int b)
{
int e;
InitStack(S);//请问初始化堆栈函数怎么写?
if (S ==NULL)
{
printf("error \n");
return;
}
while(n)
{
push(S,n%b);
n=n/b;
}
while(!StackEmpty(S))//判断栈为空的函数怎么写?
{
e=pop(S);
printf("%d",e);
}
}
void main()
{
dec_to_bin(13,2);
printf("\n");
}
程序运行结果为:
1101
/*程序错误太多*/ #include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"malloc.h"
#define
STACK_INIT_SIZE
10
//栈容量 typedef
struct
SqStack
{
int
top;
//栈顶当前指针
int
*base;
//栈空间数组
}SqStack; void
InitStack(SqStack
S);
//构造空栈S
int
Push(SqStack
S,int
e);
//入栈(栈地址,入栈数据)
返回0对,-1错
int
Pop(SqStack
S);
//出栈
(栈地址)返回栈顶数据
int
StackLength(SqStack
S);
//返回站的元素个数,即求栈长
void
Print_S(SqStack
S);
//显示栈内数据 int
main()
{
SqStack
S;
int
i=0;
int
a,e;
InitStack(S);
srand((unsigned)time(NULL));
//srand((unsigned)time(NULL))以time函数值(当前时间)作为种子
printf("随机填充5个元素为:
");
while(
i5)
{
a
=
rand()%100;
printf("%d
",
a);
Push(S,a);
i++;
}
Print_S(S);
printf("请输入要插入栈顶的元素:");
scanf("%d",e);
Push(S,e);
Print_S(S);
printf("再弹出的栈顶元素为:%d
\n",Pop(S));
printf("栈的长度为:%d
\n",StackLength(S));
Print_S(S);
return
0;
} void
InitStack(SqStack
S)
//构造空栈S
{
S.base
=
(int
*)malloc(STACK_INIT_SIZE
*
sizeof(int));
//分配组数空间,长度STACK_INIT_SIZE
if
(S.base==NULL)
{
printf("内存分配失败!\n");
return;
}
S.top=-1;
} int
Push(SqStack
S,int
e)
{
if(S.top=STACK_INIT_SIZE)
{
printf("栈空间已满,入栈失败!\n");
return
-1;
}
else
{
S.base[++S.top]=e;
return
0;
}
} int
Pop(SqStack
S)
//返回栈顶数据
{
if
(S.top=0)
//栈内有数据
{
return
S.base[S.top--];
}
else
{
printf("空栈,无数据弹出!\n");
return
-1;
}
} int
StackLength(SqStack
S)
{
return
S.top+1;
} void
Print_S(SqStack
S)
{
printf("\n出栈显示:");
if(S.top
==
-1)
printf("栈内无数据!\n");
else
{
while(S.top=0
)
printf("%d
",Pop(S));
putchar('\n');
}
}
1、C语言标准库当中没有与stack栈相关的标准类。
2、可以自定义这个头文件,例如:
struct Stack
{
int mData[100];
int mLen;
};
//初始化栈
void InitStack(Stack S)
{
S.mLen = 0;
}
//元素进栈
void Push(Stack S,int item)
{
S.mData[S.mLen++] = item;
}
//删除栈顶元素
int Pop(Stack S)
{
S.mLen--;
return S.mData[S.mLen];
}
//返回栈顶元素
int Peek(Stack S)
{
return S.mData[S.mLen-1];
}
//判断栈是否为空
bool EmptyStack(Stack S)
{
if(S.mLen == 0) return true;
return false;
}
//清空栈
void Clear(Stack S)
{
for(int i = 0;iS.mLen;++i)
{
Pop(S);
}
}