编写入栈函数c语言 c语言栈的用法

急!用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语言编写一个堆栈函数程序

//该程序简单并可正确运行,希望kutpbpb的回答能对你有所帮助!

#includestdio.h

#define N 100

typedef struct

{

int value[N];

int base;

int top;

}Sta;

void print()

{

printf("\n菜单:");

printf("\n1.入栈:");

printf("\n2.出栈:");

printf("\n3.退出:");

}

void printS(Sta S)

{

printf("\n请输出栈中元素:");

for(int i=S.top;i!=S.base;i--)

printf("%d ",S.value[i-1]);

}

void pushS(Sta S,int e)

{

if(S.top==N)

printf("\n栈满");

else

S.value[S.top++]=e;

}

void popS(Sta S,int e)

{

if(S.top==S.base)

printf("\n栈空");

else

{

e=S.value[--S.top];

printf("\n请输出出栈元素: %d",e);

}

}

void main()

{

Sta S;

int e,choose;

S.base=S.top=0;

do{

print();

printf("\n请输入你的选项:");

scanf("%d",choose);

switch(choose)

{

case 1:

printf("\n请输入入栈元素:");

scanf("%d",e);

pushS(S,e);

printS(S);

break;

case 2:

popS(S,e);

printS(S);

break;

case 3:

default:

break ;

}

if(choose==3)

break;

}while(1);

}

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语言写) 栈的基本操作

//顺序栈

#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语言板 数据结构 进栈 函数到底怎么写

看一个栈的简单实现,所有代码都写在一个头文件中,实际的话,最好把声明和实现分开。

#ifndef STACK_H

#define STACK_H

class Stack

{

public:

Stack();

Stack(const Stack copy);

Stack operator= (const Stack copy);

~Stack();

int getHeight() const;

bool isEmpty();

bool push(const int e);

bool pop(int e);

bool top(int e) const;

private:

int count;

int element[MAX_SIZE];

};

Stack::Stack()

{

count = 0;

}

Stack::Stack(const Stack copy)

{

this-count = copy.count;

for(int i = 0; i copy.count; i++)

{

element[i] = copy.element[i];

}

}

Stack Stack::operator =(const Stack copy)

{

if(copy != this)

{

this-count = copy.count;

for (int i = 0; i copy.count; i++)

{

element[i] = copy.element[i];

}

}

return *this;

}

Stack::~Stack()

{

count = 0;

}

int Stack::getHeight() const

{

return count;

}

bool Stack::isEmpty()

{

return count == 0;

}

bool Stack::push(const int e)

{

if (getHeight() == MAX_SIZE)

{

return false;

}

element[count++] = e;

return true;

}

bool Stack::pop(int e)

{

if (isEmpty() )

{

return false;

}

e = element[count--];

return true;

}

bool Stack::top(int e) const

{

e = element[count - 1];

return true;

}

#endif


名称栏目:编写入栈函数c语言 c语言栈的用法
URL分享:http://scyanting.com/article/hihehp.html