c语言创建栈的函数,c++栈函数

用c语言实现栈的建立

#include stdio.h

创新互联服务项目包括安陆网站建设、安陆网站制作、安陆网页制作以及安陆网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,安陆网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到安陆省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

#include stdlib.h

typedef struct _stack {

int size;

int* base;

int* sp;

} stack;

void init(stack* s, int n)

{

s-base = (int*)malloc(sizeof(int)*n);

s-size = n;

s-sp = s-base;

}

int push(stack* s, int val)

{

if(s-sp - s-base == s-size) {

puts("overflow");

exit(1);

}

return *s-sp++ = val;

}

int pop(stack* s)

{

if(s-sp == s-base) {

puts("underflow");

exit(2);

}

return *--s-sp;

}

int empty(stack* s)

{

return s-sp == s-base;

}

void clean(stack* s)

{

if(s-base)

free(s-base);

}

int main(void)

{

stack s;

int i;

init(s, 100);

for(i = 0; i 10; ++i)

printf("%d ", push(s, i));

putchar('\n');

while(!empty(s))

printf("%d ", pop(s));

clean(s);

return 0;

}

在C语言中该怎样建立栈?具体代码是什么?

1.栈空间(stack段)用来存放函数中的局部变量和函数调用时的上下文。

2.

全局变量和静态变量存放于进程的数据段。

3.

windows下进程的栈空间会自动增长,一般不会出现空间不足的问题;

4。如果变量实在太大,甚至大于栈可增长的范围,如数百兆,则会编译出错。

如何用C语言创建一个链栈,并进行操作

1 思路: 主要是链表的插入和删除操作

2 代码

#includestdio.h

#includestdlib.h

typedef struct node

{

int  data;

struct node *next;

}node_type;

void push(node_type* stack, int elem){

node_type*node = (node_type*)malloc(sizeof(node_type));

node-data = elem;

node-next = stack;

stack = node;

}

int pop(node_type* stack){

int elem = stack-data;

node_type*node = stack;

stack = stack-next;

free(node);

return elem;

}

bool IsEmpty(node_type* stack){

return stack == NULL;

}

void display(node_type*stack){

while (stack){

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

stack = stack-next;

}

puts("");

}

void destroy(node_type*stack){

while (!IsEmpty(stack)){

pop(stack);

}

}

int main(){

puts("(1) 建立空链栈");

node_type*stack = NULL;

puts("\n(2) 调用进栈函数,将从键盘输入的数据元素逐个进栈,输入0结束;");

int num;

scanf("%d", num);

while (num != 0){

push(stack, num);

scanf("%d", num);

}

puts("\n(3) 显示进栈后的数据元素");

display(stack);

puts("\n(4) 调用两次出栈函数,显示出栈后的数据元素");

if (!IsEmpty(stack))

printf("%d\n", pop(stack));

if (!IsEmpty(stack))

printf("%d\n", pop(stack));

destroy(stack);

getchar();

getchar();

return 0;

}

3 运行效果

栈的c语言实现基本操作

写了一个链式栈,你看看

# include stdio.h

# include malloc.h

# include stdlib.h

typedef struct Node

{

int data;

struct Node *pNext;

}NODE, *PNODE;

typedef struct Stack

{

PNODE pTop;

PNODE pBottom;//pBottem是指向栈底下一个没有实际意义的元素

}STACK, *PSTACK;

void init( PSTACK );

void push( PSTACK, int );

void traverse( PSTACK );

int pop( PSTACK, int * );

int empty( PSTACK pS );

int main( void )

{

STACK S;//STACK等价于struct Stack

int val;

init( S );//目的是造出一个空栈

push( S, 1 );//压栈

push( S, 2 );

push( S, 3 );

push( S, 4 );

push( S, 5 );

push( S, 6 );

push( S, 7 );

traverse( S );//遍历输出

// clear( S ); //清空数据

// traverse( S );//遍历输出

if( pop( S, val ) )

{

printf( "出栈成功,出栈的元素是%d\n", val );

}

else

{

printf( "出栈失败" );

}

traverse( S );//遍历输出出栈之后的元素

return 0;

}

void init( PSTACK pS )

{

pS-pTop = ( PNODE )malloc( sizeof( NODE ) );

if( NULL == pS-pTop )

{

printf( "动态内存分配失败!\n" );

exit( -1 );

}

else

{

pS-pBottom = pS-pTop;

pS-pTop-pNext = NULL;//或是pS-pBottom = NULL;

}

}

void push( PSTACK pS, int val )

{

PNODE pNew = ( PNODE )malloc( sizeof( NODE ) );

pNew-data = val;

pNew-pNext = pS-pTop;//pS-Top不能改为pS-pBottom

pS-pTop = pNew;

}

void traverse( PSTACK pS )

{

PNODE p = pS-pTop;

while( p != pS-pBottom )

{

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

p = p-pNext;

}

printf( "\n" );

}

int empty( PSTACK pS )

{

if( pS-pTop == pS-pBottom )

return 1;

else

return 0;

}

//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,则返回false,否则true

int pop( PSTACK pS, int *pVal)

{

if( empty( pS ) )//pS本身存放的就是S的地址

{

return 0;

}

else

{

PNODE r = pS-pTop;

*pVal = r-data;

pS-pTop = r-pNext;

free( r );

r = NULL; //为什么要把r赋给NULL呢??

return 1;

}

}

//clear清空

void clear( PSTACK pS )

{

if( empty( pS ) )

{

return ;

}

else

{

PNODE p = pS-pTop;

PNODE q = p-pNext;

while( p != pS-pBottom )

{

q = p-pNext;

free( p );

p = q;

}

pS-pTop = pS-pBottom;

}

}

c语言建栈

#include"stdio.h"

#include"malloc.h"

#include"stdlib.h"

#define OK 1

#define ERROR 0

#define OVERFLOW -2

#define TRUE 1

#define FALSE 0

typedef char ElemType;

typedef int Status;

#define STACK_INIT_SIZE 100 //存储空间初始分配量

#define STACKINCREMENT 10 //存储空间分配增量

typedef struct

{

ElemType *base; //在栈构造和销毁之后,base的值为NULL

ElemType *top; //栈顶指针

int stacksize; //当前已分配的存储空间,以元素为单位

}SqStack;

// 构造一个空栈S

Status InitStack(SqStack S)

{

S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));

if(!S.base) //存储分配失败

exit (OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}//InitStack

/////////////////// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR /////

Status GetTop(SqStack S,ElemType e)

{

if(S.top==S.base)

return ERROR;

e=*(S.top-1);

return OK;

}//GetTop

////////////////// 插入元素e为新的栈顶元素 /////////////////////////////////////

Status Push(SqStack S,ElemType e)

{

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

{

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

if(!S.base)

exit (OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}//Push

////////////////// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR

Status Pop(SqStack S,ElemType e)

{

if(S.top==S.base)

return ERROR;

e=*--S.top;

return OK;

}//Pop

////////// main() //////////////////////////////

void main()

{

int i;

char ch,e,c;

SqStack S;

InitStack(S);

printf("1.Push\t2.Pop\t3.GetTop\t4.exit\n");

while(1)

{

printf("请选择:");

scanf("%d",i);

c=getchar(); //*****接受回车符******

switch (i)

{

case 1:

printf("请输入要插入的元素:");

scanf("%c",ch);

Push(S,ch);

break;

case 2:

printf("弹出栈顶元素:");

Pop(S,e);

printf("%c\n",e);

break;

case 3:

printf("取栈顶元素:");

GetTop(S,e);

printf("%c\n",e);

break;

case 4:

exit(0);

default:

printf("ERROR!Please Reput A Number\n");

}

}

}


网站名称:c语言创建栈的函数,c++栈函数
文章来源:http://hbruida.cn/article/hsieih.html