数据结构之栈

来源:互联网 发布:西安爱知 编辑:程序博客网 时间:2024/06/06 03:04
#include<stdio.h>#define STACKSIZE 10#define DataType intstruct stack_1{    DataType items[5];    int top;};typedef struct stack_1 SqStack ;int InitStack(SqStack *s);//建立(初始化)栈int Push_Stack(SqStack *s,DataType *a);//入栈int Out_Stack(SqStack *s,DataType *a );//出栈int Visit_Stack(SqStack *s);//遍历栈int Get_Stack(SqStack *s,DataType *a );//取栈顶int Search_n_Stack(int n,SqStack *s);//取栈中第n个元素int main(void){SqStack zhan1,*s;int i;char a = 'a',b = 'w',q;s = &zhan1;InitStack(&zhan1); if(!Visit_Stack(&zhan1))    printf("栈空。\n"); if(!Get_Stack(&zhan1,&q ))     printf("栈已空!\n\a"); else printf("\n栈顶元素为 %c \n",q);for(i=0;i<5;i++,a++)//////////////////////////////////////什么问题?{    if(!Push_Stack(&zhan1,&a))        printf("栈已满!\n\a");      else   printf("%c->%d  ",s->items[i],s->top);}if(!Get_Stack(&zhan1,&q ))     printf("栈已空!\n\a"); else printf("\n栈顶元素为 %c \n",q);for(i=0;i<3;i++){if(!Out_Stack(&zhan1,&q))     printf("栈已空!\n\a"); printf("\n出栈元素为 %c ",q);} if(!Get_Stack(&zhan1,&q ))     printf("栈已空!\n\a"); else printf("\n栈顶元素为 %c \n",q);  if(!Visit_Stack(&zhan1))    printf("栈空。");   getchar();return 0;}/***********************************************************//*Functionality function:初始化(建立空栈)               *//*Function Parameters;s-指向栈的指针                       *//*Function return value:建栈成功返回1 ;栈顶默认存储NULL  *//***********************************************************/int InitStack(SqStack *s){    s->top = -1;    return 1;}/*******************************************************************//*Functionality function:入栈                                     *//*Function Parameters:s-指向栈的指针  a-要入栈的元素指针          *//*Function return value:栈满返回0;入栈成功返回1,否则提示未知错误 *//*Remarks:入栈元素使用指针的目的是为了可以入栈字符串              *//*         因为函数实参不能是一个数组(升级函数用)                  *//*******************************************************************/int Push_Stack(SqStack *s,DataType *a){    if(s->top >= STACKSIZE-1)     return 0;    else { s->top++;    s->items[s->top] = *a;    return 1;};    printf("入栈未知错误!\a\n");}/********************************************************************//*Functionality function:出栈                                      *//*Function Parameters:s-指向栈的指针  a-存储出栈的元素             *//*Function return value:空栈返回0;出栈成功返回1,否则提示未知错误 *//********************************************************************/int Out_Stack(SqStack *s,DataType *a ){    if (s->top < 0)        return 0;    else { *a = s->items[s->top];        s->top--;        return 1;    };    printf("出栈未知错误!\a\n");}/**************************************************************//*Functionality function:遍历栈(本函数遍历结果打印在屏幕上)*//*Function Parameters:s-指向栈的指针                         *//*Function return value:遍历完成返回1,空栈返回0             *//*Remarks:栈中元素从栈顶开始依次打印                         *//**************************************************************/int Visit_Stack(SqStack *s){    int i;    if (s->top<0)        return 0;    else {for(i=s->top;i>=0;i--)          printf("%d  ",s->items[i],s->top);          return 1;}    printf("未知错误!\a\n");}/*****************************************************//*Functionality function:取栈顶元素(非出栈)       *//*Function parameters;s-指向栈的指针 a-返回栈顶元素 *//*Function return value:栈空返回0,取出返回1        *//*****************************************************/int Get_Stack(SqStack *s,DataType *a ){    if (s->top <= -1)        return 0;    else { *a = s->items[s->top];            return 1;        };    printf("取栈顶元素未知错误!\a\n");}/*****************************************************//*Functionality function:取栈中第n个元素(非出栈)  *//*Function parameters;s-指向栈的指针 n-返回栈顶元素 *//*Function return value:栈空返回0,取出返回1        *//*****************************************************/int Search_n_Stack(int n,SqStack *s){    if (s->top <= -1)        ;    else if(n>(s->top+1))        ;    else        return s->items[n-1];    printf("取栈顶元素未知错误!\a\n");}


0 0
原创粉丝点击