C语言堆栈出栈函数的编写 c 堆 栈

用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;

}

数据结构实验(用c语言写) 栈的基本操作

//顺序栈

#includestdio.h

#includestdlib.h

#includemalloc.h

#define STACK_INIT_SIZE 100;

#define STACKINCREMENT 10;

typedef struct

{

int *base;

int *top;

int stacksize;

}SqStack;

typedef int ElemType;

int InitStack(SqStack S) //为栈S分配存储空间,并置S为空栈

{

int size = STACK_INIT_SIZE;

S.base=(int *)malloc(size*sizeof(ElemType));

if(!S.base)

return 0;

S.top=S.base; //置栈S为空栈

S.stacksize=STACK_INIT_SIZE;

return 1;

}

int GetTop(SqStack S,int e) //若栈不空,则用e返回S的栈顶元素

{

if(S.top==S.base) return 0;

e=*(S.top-1);

return 1;

}

int Push(SqStack S, int e) /*进栈函数,将e插入栈S中,并使之成为栈顶元素*/

{ if(S.top-S.base=S.stacksize) /*栈满,追加存储空间*/

{

int stackinvrement = STACKINCREMENT;

S.base=(ElemType *) realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));

if(!S.base)

return 0; /*存储分配失败*/

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return 1;

}

int Pop(SqStack S,int e)/*出栈函数,若栈S不空,则删除S的栈顶元素,用e返回其值*/

{ if(S.top==S.base) return 0;

e=*--S.top;

return 1;

}

void OutputStack(SqStack S)

{int *q;

q=S.top-1;

for(int i=0;iS.top-S.base;i++)

{

printf("%3d ",*q);q--;}

}

void main()

{

int a,b,c ;

char m;

SqStack s;

InitStack(s);

printf("请输入要进栈的元素个数是:");

scanf("%d",a);

printf("\n请输入要进栈的%d个元素:",a);

for(b=0;ba;b++) {

scanf("%d",c);

Push(s,c); }

do { printf("\n");

printf("*********** 1.输出栈的元素**********\n");

printf("*********** 2.取栈顶元素************\n");

printf("*********** 3.删除栈顶元素**********\n");

printf("*********** 4.退出程序**********\n");

printf("\n请选择一个字符:");

getchar();

scanf("%c",m);

switch(m) {

case '1': printf("\n输出的栈为:");

OutputStack(s);

break;

case '2': GetTop(s,c);

printf("\n栈顶元素为:%d",c);

printf("\n输出的栈为:");

OutputStack(s);

break;

case '3': Pop(s,c);

printf("\n删除的栈顶元素:%d",c);

printf("\n输出的栈为:");

OutputStack(s);

printf("\n");

break;

case '4':break;

default: printf("输入的数字有错,请重新选择!\n"); break;

}

}while(m!='4');

}

//链栈

#includestdio.h

#includestdlib.h

typedef struct SNode

{

int data;

struct SNode *next;

}SNode,*LinkStack;

LinkStack top;

LinkStack PushStack(LinkStack top,int x) //入栈

{

LinkStack s;

s=(LinkStack)malloc(sizeof(SNode));

s-data=x;

s-next=top;

top=s;

return top;

}

LinkStack PopStack(LinkStack top) //退栈

{

LinkStack p;

if(top!=NULL)

{

p=top;

top=top-next;

free(p);

printf("退栈已完成\n");

return top;

}

else printf("栈是空的,无法退栈!\n"); return 0;

}

int GetStackTop(LinkStack top) //取栈顶元素

{

return top-data;

}

bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型

{

return top==NULL ? true:false;

}

void Print()

{

SNode *p;

p=top;

if(IsEmpty())

{

printf("The stack is empty!\n");

return;

}

while(p)

{

printf("%d ", p-data);

p=p-next;

}

printf("\n");

}

void main()

{

int x,a,b;

char m;

do { printf("\n");

printf("###############链栈的基本操作##################\n");

printf("××××××××1.置空栈××××××××××\n");

printf("××××××××2.进栈×××××××××××\n");

printf("××××××××3.退栈×××××××××××\n");

printf("××××××××4.取栈顶元素××××××××\n");

printf("××××××××5.退出程序×××××××××\n");

printf("##############################################\n");

printf("\n请选择一个字符:");

scanf("%c",m);

switch(m){

case '1':

top=NULL;

printf("\n栈已置空!");

break;

case '2':

printf("\n请输入要进栈的元素个数是:");

scanf("%d",a);

printf("\n请输入要进栈的%d个元素:",a);

for(b=0;ba;b++) {

scanf("%d",x);

top=PushStack(top,x); }

printf("进栈已完成!\n");

printf("\n输出栈为:");

Print();

break;

case '3':

printf("\n操作之前的输出栈为:");

Print();

top=PopStack(top);

printf("\n操作过后的输出栈为:");

Print();

break;

case '4':

printf("\n输出栈为:");

Print();

if(top!=NULL)

printf("\n栈顶元素是:%d\n",GetStackTop(top));

else

printf("\n栈是空的,没有元素!");

break;

case '5':break;

default:

printf("\n输入的字符不对,请重新输入!");

break;

}

getchar();

}while(m!='5');

}

C语言入栈出栈操作的程序,希望有人为我解答

您好:

你是在学习数据结构方面的知识吧。

首先呢,你学习栈,要了解栈的定义,明白它是怎么一回事,就是去理解他的思想。

最后才去用代码来体现出来。

栈是先进后出,其实是用代码控制的,

其实你要他先进先出也可以。

你只要明白他的原理就行。

代码,你可以理解为跟计算的一种对话的语言。

不用想的那么复杂。

就好比说话,你只要知道你要说什么就行(算法),而不用刻意明白要怎么说(语法)。

下面给我出我以前写的代码,关于栈的,顺序栈,其实还有链栈。

/*   数据结构-栈   */

/*   异常的细节处理还没弄好*/

#include iostream

#include stdlib.h

#include malloc.h

#define len_chu_shi 50   //初始空间大小

#define len_zeng_jia 10  //额外增加空间大小

#define OK 0       //正确

#define OVER -2     //

#define ERROR -1   //

using namespace std;

typedef int elem_type;          //元素类型

typedef int function_type;      //函数类型

typedef struct zhan

{

elem_type *top;    //栈顶

elem_type *base;   //栈底

int len;           //当前空间大小

}zhan;                //栈结构

function_type Init_zhan(zhan *exam);//初始化栈

function_type Get_top(zhan *exam,elem_type *e);//获取栈顶元素

function_type Add_top(zhan *exam,elem_type *e);//增加栈顶元素

function_type Delete_top(zhan *exam, elem_type *e);//删除栈顶元素

int main(int argc,char *argv[])

{

zhan *example = (zhan *)malloc(sizeof(zhan));

Init_zhan(example);

return OK;

}

function_type Init_zhan(zhan *exam)

{

exam-base = (elem_type *)malloc(len_chu_shi*sizeof(elem_type));

if(!exam-base)  //分配失败

exit(OVER);

exam-top = exam-base;

exam-len = len_chu_shi;

return OK;

}//--end

function_type Get_top(zhan *exam,elem_type *e)

{

if(!exam-base)

exit(OVER);

*e = *(exam-top - 1);  //不能用自减运算符,那样会改变栈顶指针的值

return OK;

}//--end

function_type Add_top(zhan *exam,elem_type *e)

{

if(exam-len = exam-top - exam-base)  //我个人觉得,如果 已经"",就已经数据溢出了,就应该报错

exam-base = (elem_type *)realloc(exam-base,(exam-len + len_zeng_jia)*sizeof(elem_type));

if(!exam-base)  //分配失败

exit(OVER);

*(exam-top++) = *e;   //应该是先改变栈顶指针的内容,然后栈顶指针再自增

exam-len += len_zeng_jia;

return OK;

}//--end

function_type Delete_top(zhan *exam, elem_type *e)

{

if(!exam-base)  //空栈

exit(OVER);

*e = *(--exam-top);  //应该是栈顶指针先自减,然后获取栈顶指针的内容

return OK;

}//--end

急!用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");

}

}


标题名称:C语言堆栈出栈函数的编写 c 堆 栈
文章链接:http://myzitong.com/article/ddjggcj.html