• 顺序栈、链栈基本操作


    // Stack.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    //*
     #define STACK_MAX_SIZE 7
     int StackData[STACK_MAX_SIZE] = {'A','B','C','D','E','F','G'};
    //*/
    /*
     #define STACK_MAX_SIZE 14
     int StackData[STACK_MAX_SIZE] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N'};
    */
    /*顺序栈类型定义*/
    typedef struct
    {
     int data[STACK_MAX_SIZE];
     int top;
    }sqStack;
    /*链栈类型定义*/
    struct LinkStack
    {
     int data;
     struct LinkStack *link;
    };

    typedef struct LinkStack lkStack;
    /*顺序栈基本操作函数定义部分*/
    void sqInitialize(sqStack *stack)
    {
     stack->top = 0; 
    }


    int sqIsEmpty(sqStack *stack)
    {
     if(stack->top == 0)
      return(1);
     else
      return(0);
    }


    int sqIsFull(sqStack *stack)
    {
     if(stack->top >= STACK_MAX_SIZE)
      return(1);
     else
      return(0);
    }


    int sqPush(sqStack *stack,int data)
    {
     if(sqIsFull(stack))
     {
      printf("堆栈已満!/n");
      return(0);
     }
     else
     {
      stack->data[stack->top++] = data;
      return(1);
     }
    }


    int sqPop(sqStack *stack,int *p)
    {
     if(sqIsEmpty(stack))
     {
      printf("堆栈已空!/n");
      return(0);
     }
     else
     {
      *p = stack->data[--stack->top];
      return(1);
     }
    }


    int sqGetTop(sqStack *stack,int *p)
    {
     if(sqIsEmpty(stack))
     {
      printf("堆栈已空!/n");
      return(0);
     }
     else
     {
      *p = stack->data[stack->top];
      return(1);
     }
    }


    void sqWriteValue(sqStack *stack,int array[],int n)
    {
     int i;
     for(i=0;i<n;i++)
      if(sqPush(stack,array[i])) printf("Stack[%d] = %c/t",stack->top-1,array[i]);
    }


    void sqPrintValue(sqStack *stack)
    {
     int StackData,i;
     i=0;
     while(sqPop(stack,&StackData))
      printf("Stack[%d] = %c/t",stack->top,StackData);
     printf("/n");
    }

    /*链栈基本操作函数定义部分*/
    void lkInitialize(lkStack *top)
    {
     top = NULL;
    }


    int lkIsEmpty(lkStack *top)
    {
     if(top == NULL)
      return(1);
     else
      return(0);
    }


    int lkPush(lkStack  *top,int data)
    {
     lkStack  *q;
     q = (lkStack  *)malloc(sizeof(lkStack));
     if(q==NULL)
      return(0);
     else
     {
      q->data = data;
      q->link = NULL;
      top->link = q;
      top = q;
      return(1);
    }


    int lkPop(struct LinkStack  *stack,int *p)
    {
     struct LinkStack  *q;
     if(lkIsEmpty(stack))
     {
      printf("堆栈已空!/n");
      return(0);
     }
     else
     {
      q = stack;
      *p = stack->data;
      stack = stack->next;
      //free(q);
      return(1);
     }
    }


    int lkGetTop(struct LinkStack  *stack,int *p)
    {
     if(lkIsEmpty(stack))
     {
      printf("堆栈已空!/n");
      return(0);
     }
     else
     {
      *p = stack->data;
      return(1);
     }
    }


    void lkWriteValue(struct LinkStack  *stack,int n)
    {
     int i;
     for(i=0;i<n;i++)
      if(lkPush(stack,i*10)) printf("Stack[%d] = %d/t",i,i*10);
    }


    void lkPrintValue(struct LinkStack  *stack,int n)
    {
     int StackData,i;
     i=0;
     for(i=0;i<n;i++)
     {
      lkPop(stack,&StackData);
      printf("Stack[%d] = %d/t",i++,StackData);
     }
     printf("/n");
    }

    int main(int argc, char* argv[])
    {
     sqStack *stack1;
     struct LinkStack  *stack2;
      //顺序栈处理部分
     sqInitialize(stack1);
     printf("/n顺序栈[入栈]数据........./n");
     sqWriteValue(stack1,StackData,STACK_MAX_SIZE);
     printf("/n顺序栈[出栈]数据........./n");
     sqPrintValue(stack1);
     /*
     //链栈处理部分
     lkInitialize(stack2);
     printf("/n链栈入栈数据........./n");
     lkWriteValue(stack2,10);
     printf("/n链栈出栈数据........./n");
     lkPrintValue(stack2,10);
     */
     return 0;
    }
     

  • 相关阅读:
    Excelpackage的简单使用(导出用户信息并保存)
    set nocount on/off的作用,可配合存储过程使用
    在sql中case子句的两种形式
    C#开发微信门户及应用(1)--开始使用微信接口(转)
    张建总的一封信
    Jquery在线工具
    《EnterLib PIAB深入剖析》系列博文汇总 (转)
    微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity? (转)
    结合领域驱动设计的SOA分布式软件架构 (转)
    ENode框架旨在帮助我们开发ddd,cqrs、eda和事件采购风格的应用程序。(netfocus 汤雪华)
  • 原文地址:https://www.cnblogs.com/ljl_falcon/p/2194086.html
Copyright © 2020-2023  润新知