
正文
c语言关于栈的函数代码 c语言栈的应用实例
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
求C语言堆栈代码。静态就行,只要有 出,入,取栈顶就行了
//静态就能满足你的要求的话,可以把动态那些代码去掉即可
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define OK 0
#define ERROR -65535
//定义一个顺序栈
typedef struct
{
int *base; //在栈构造之前和销毁之后,base的值为NULL
int *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位,当然了,这个也可以不需要
}SqStack;
int InitStack( SqStack *S )
{
//构造一个空栈
S-base = (int *)malloc(STACK_INIT_SIZE *sizeof(SqStack));//这里STACK_INIT_SIZE你可以在一开始定义,比如#define STACK_INIT_SIZE 100
if (NULL == S-base)
{//内存分配失败
return ERROR;
}
S-top = S-base;
S-stacksize = STACK_INIT_SIZE;
return OK;
}
int GetTop( SqStack *S, int *element)
{
//若栈不空,取栈顶元素,用element返回
if (S-base == S-top)
{
return ERROR;
}
*element = *(S-top - 1);
return *element;
}
int Push( SqStack *S, int element )
{
//插入元素element为新的栈顶元素
if ( (S-top - S-base) S-stacksize )
{//栈满,追加空间
S-base = (int *)realloc(S-base, (STACK_INIT_SIZE + STACKINCREMENT)*sizeof(SqStack));
if ( NULL == S-base )
{
return ERROR;
}
S-top = S-base + S-stacksize;
S-stacksize += STACKINCREMENT;
}
*S-top++ = element;
return OK;
}
int Pop( SqStack *S, int *element )
{
//若栈不为空,则删除栈顶元素,用element返回其值
if ( S-top == S-base )
{
return ERROR;
}
*element = * (--S-top);
return OK;
}
相关问答
Q1: 用C语言编写函数实现顺序栈的进栈、退栈、取栈顶的算法。
#includestdio.h
#define stacksize 100 //假定预分配的栈空间最多为100 个元素
typedef char elementtype; //假定栈元素的数据类型为字符 ,在此处可以自行设置
typedef struct
{
elementtype data[stacksize];
int top;
}seqstack;
// 置空栈
void initstack(seqstack *s)
{
s-top=-1;
//解释一下,s-top 指向的是当前栈顶元素的位置
//当要向栈中添加一个新元素时,要先将s-top增加1,
//此时s-top 指向的就是新元素要添加的位置了。
//所以当栈为空时,填加第一元素时,top加1 后
//s-top的值就变为0,也就是第一个元素的位置了。
}
//判栈空
int stackempty(seqstack *s)
{
if(s-top==-1)
return 1; //若相等就返回1,否则为0
else return 0;
}
//入栈
void push(seqstack *s,elementtype x)
{
if(s-top==stacksize -1 ) //进栈前判断栈是否已经满了
printf(" stack overflow\n");
else
{
s-top= s-top + 1;
s-data[s-top]=x;
}
}
//出栈
elementtype pop(seqstack *s)
{
if(stackempty(s)) //出栈前先判断当前栈中是否有内容
printf("stack is empty\n");
else
{
return s-data[s-top--]; //出栈后s-top的值会自减1
}
}
//取栈顶元素(只是想知道栈顶的值,并没有出栈)
elementtype gettop(seqstack *s)
{
if(stackempty(s))
{
printf("stack already empty.\n");
}
else return s-data[s-top];
}
int main()
{
elementtype x;
seqstack *s; //定义一个栈,用指针的方式定义的
initstack(s); //想初始化定义好的栈
//当栈为空时调用出栈操作
pop(s);
//向栈中添加一个元素a
push(s,'a');
//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);
//再添加一个元素b
push(s,'b');
//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);
//弹出栈顶的元素
x=pop(s);
printf("%c\n",x);
//观察弹出后栈顶元素的变化情况
x=gettop(s);
printf("%c\n",x);
return 0;
}
Q2: 急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行。
就用这堆函数就可以了,不懂再追问
#include string.h
#define MaxSize 100
int mystack[MaxSize];/* 第0个单元保存现在的长度 */
/* 初始化函数 */
void init_stack(int* stack){
memset(stack,0,sizeof(stack));
}
/* 入栈函数 */
void push_back(int* stack,int num){
if(stack[0]MaxSize-1){
++stack[0];
stack[ stack[0] ] = num;
}
else{
printf("ERORR!\n");
}
}
/* 返回栈空间 */
int size(int* stack){
return stack[0];
}
/* 返回栈顶函数 */
int top(int* stack){
if(stack[0]0){
return stack[ stack[0] ];
}
else{
printf("ERORR!\n");
return -1;
}
}
/* 出栈函数 */
void pop(int* stack){
if(stack[0]0){
--stack[0];
}
else{
printf("ERORR!\n");
}
}
Q3: 用C写栈的源代码
#include stdio.h
#include malloc.h
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR -1
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int status;
typedef int ElemType;
typedef struct{
ElemType data;
ElemType *base;
ElemType *top;
int stacksize;
}Stack,*SqStack;
status InitStack(Stack S){
//构造一个空栈
S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
status GetTop(Stack S,ElemType e){
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top==S.base) return ERROR;
e= * (S.top-1);
return OK;
}//GetTop
status Push(Stack S,ElemType e){
//插入元素e为新的栈顶元素
if(S.top-S.base=S.stacksize){
S.base=(ElemType *)realloc(S.base,
(S.stacksize+STACKINCREMENT) * sizeof(ElemType));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push
status Pop(Stack S,ElemType e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S.top==S.base) return ERROR;
e= * --S.top;
return OK;
}//Pop
Q4: 用数组实现栈的功能的C语言代码?
栈在处理数组上面真的很方便,这是栈的基础方法函数
//顺序栈的实现stack.cpp
#include "stack.h"
Status SqStack::InitStack(SqStack **S)
{ (*S)=(SqStack *) malloc(sizeof(SqStack));
(*S)-base=(SElemType *)malloc(STACKSIZE *sizeof(SElemType));
if(!(*S)-base) exit(OVERFLOW);
(*S)-top=(*S)-base;
(*S)-stacksize=0;
return 1;}
Status SqStack::DestroyStack()
{free(base);return 1;}
Status SqStack::ClearStack()
{stacksize=0;return 1;}
bool SqStack::StackEmpty()
{ if(stacksize==0) return true;
else return false;
}
int SqStack::StackLength()
{ return stacksize;}
SElemType SqStack::GetTop()
{ if(top==base)
{cerr"空栈!\n";exit(1);}
return *(top-1);
}
Status SqStack::Push(SElemType e)
{ *(top++)=e;stacksize++;
return 1;
}
SElemType SqStack::Pop(SElemType *e)
{ if(top==base)
{cerr"空栈!\n";exit(1);}
*e=*--top;
stacksize--;
return *e;
}
void SqStack::StackTraverse(void (*visit)(SElemType *))
{while(top!=base){
stacksize--;visit(--top);}}
关于c语言关于栈的函数代码和c语言栈的应用实例的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






