数据结构之栈c语言实现
栈是一种先进后出的数据结构,计算机中常见的函数调用就用到了这种结构,其常用的操作就是出栈、入栈,如下图,数据总是从栈顶入,从栈顶出:
接下来看一个简单的程序将按“abcdef”入栈,并打印其出栈顺序:
#include<stdio.h>#include<stdlib.h>#include<string.h>#defineSTACK_SIZE16#defineNAME_MAX_SIZE32#defineERR-1#defineSUCC0typedefstructstack{char*array;/*栈的起始地址*/intstack_size;/*栈大小*/inttop;/*栈顶所在的位置*/char(*pop)(structstack*sta);/*出栈*/int(*push)(structstack*sta,chardata);/*入栈*/}stack_t;staticintis_empty(stack_t*sta){return(sta->top==-1);}staticintis_full(stack_t*sta){return(sta->top==sta->stack_size-1);}/*将栈顶元素出栈,并返回*/charpop_stack(stack_t*sta){charch;if(is_empty(sta)){printf("thestackisempty\n");returnERR;}ch=sta->array[sta->top];--sta->top;returnch;}/*在栈顶插入元素*/intpush_stack(stack_t*sta,chardata){if(is_full(sta)){printf("thestackisfull\n");returnERR;}++sta->top;sta->array[sta->top]=data;returnSUCC;}voidinit_stack(stack_t**sta){*sta=(stack_t*)malloc(sizeof(stack_t));if((*sta)==NULL){printf("nomem\n");return;}(*sta)->top=-1;(*sta)->stack_size=STACK_SIZE;(*sta)->pop=pop_stack;(*sta)->push=push_stack;(*sta)->array=(char*)malloc(STACK_SIZE);if((*sta)->array==NULL){printf("nomem\n");return;}}intmain(intargc,char*argv[]){intsize,ret,i;stack_t*sta_addr;chardata[]="abcdef";init_stack(&sta_addr);size=sizeof(data)/sizeof(data[0]);for(i=0;i<size;i++){sta_addr->push(sta_addr,data[i]);}while(1){ret=sta_addr->pop(sta_addr);if(ret!=ERR){printf("%c,",ret);}else{break;}}return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。