链栈

来源:互联网 发布:排序java 编辑:程序博客网 时间:2024/06/11 01:57


//链栈.cpp :定义控制台应用程序的入口点。

// 作者RicardoMTan

 

#include"stdafx.h"

#include"malloc.h"

 

typedefintDataType;

typedefstructStackNode{

   DataTypedata;            //数据域

   structStackNode *next;   //指针域

}StackNode;                   //栈数据类型    

 

typedefstructLinkStack{

   StackNode*top;           //链栈指针域

}LinkStack;                   //链栈数据类型

 

/*初始化栈*/

StackNode*InitStack(LinkStack *s){

   returns->top=NULL;

}

 

/*判断栈是否为空*/

boolStackEmpty(LinkStack *s){

   return (s->top==NULL);

}

 

/*进栈*/

voidPush(LinkStack *s){

   DataTypeargment;

   printf("输入进栈元素:");

   scanf_s("%d",&argment);

   StackNode*p = (StackNode *)malloc(sizeof(StackNode));

   p->data = argment;

   p->next =s->top;

   s->top= p;

}

 

/*输出栈元素*/

voidDisplay(LinkStack *s){

   StackNode*p =s->top;             //为了不改变栈顶指针(s->top)的指向,定义另一个指针来访问

   if(StackEmpty(s)){

        printf("Stackunder flow!\n");

   }

   else{

        printf("栈元素集合为: ");

        while(p !=NULL)

        {

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

            p = p->next;               //p指针下移

        }

        printf("\n");

   }  

}

 

/*求栈长*/

intGetLength(LinkStack *s){

   int count =0;//计数器     

   StackNode*p =s->top;

   if(StackEmpty(s)){

        printf("Stackunder flow!\n");

        returncount;

   }

   else{

        while(p !=NULL){

            count++;

            p = p->next;

        }

        returncount;

   }

}

 

/*出栈*/

DataTypePop(LinkStack *s){

   DataTypee;

   StackNode*p =s->top;

   if(StackEmpty(s)){

        printf("Stackunder flow!\n");

        return0;

   }

   else{

        e = p->data;

        s->top= p->next;

        free(p);

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

        returne;

   }

}

 

/*获取栈顶元素*/

DataTypeStackGetTop(LinkStack *s){

   if(StackEmpty(s)){

        printf("Stackunder flow!\n");

        return0;

   }

   else{

        returns->top->data;

   }  

}

 

/*释放栈*/

voidDestoryStack(LinkStack *&s){

   StackNode*p =s->top->next;

   while (s->top!=NULL){

        free(s);

        s->top= p;

        s->top=s->top->next;

   }

   free(s);

}

 

/*控制函数*/

intOperate(LinkStack *s){

   InitStack(s);

 

   int flag =0;

   printf("\t\t\t-------------------\n");

   printf("\t\t\t1-进栈\n");

   printf("\t\t\t2-输出栈元素\n");

   printf("\t\t\t3-获取栈顶元素\n");

   printf("\t\t\t4-出栈\n");

   printf("\t\t\t5-返回栈长\n");

   printf("\t\t\t0-退出\n");

   printf("\t\t\t-------------------\n");

   printf("\t\t\t\t\t\t输入指令:");

   scanf_s("%d",&flag);

   while(flag!=0){

        switch(flag){

        case0:

            break;

        case1:

            Push(s);

            break;

        case2:

            Display(s);

            break;

        case3:

            if(GetLength(s) == 0)

                 printf("栈为空!\n");

            else

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

            break;

        case4:

            Pop(s);

            break;

        case5:

            if(GetLength(s)==0)

                 printf("栈为空!\n");

            else

                 printf("栈长为:%d\n", GetLength(s));

            break;  

        }

        printf("\t\t\t\t\t\t输入指令:");

        scanf_s("%d",&flag);

   }

   return 0;

}

 

intmain(){

   LinkStack*s;

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

   Operate(s);

   return 0;

}

0 0
原创粉丝点击