数据结构:栈的顺序存储(三)

来源:互联网 发布:杭州淘宝网汽车拍卖 编辑:程序博客网 时间:2024/06/10 14:32
#if 0--------------------------------------------------  将栈的返回类型和参数封装为void *类型 ---------------------------------------------------#endif ---------------------------------------------------------------  SeqStack.h  -------------------------------------------------------------#pragma once#define true 1#define false 0#include<stdio.h>#include<stdlib.h>#include <string.h>#define MAXSIZE 1024typedef void* SeqList;/***** 栈的顺序存储 ******/typedef struct SeqStack    {      void * base[MAXSIZE];  //1024      int size;    }SeqStack;#ifdef __cplusplusextern "C"{#endif/********栈的初始化*********/SeqList InitSeqStack();/*********压栈操作*********/void PushSeqStack(SeqList stack,void *data);/*********弹栈操作********/void PopSeqStack(SeqList stack);/*********获取栈顶元素*********/void *GetTopSeqStack(SeqList stack);/*********销毁栈操作*********/void DestorySeqStack(SeqList stack);/**********获取栈大小********/void GetLenSeqStack(SeqList stack);#ifdef __cplusplus    }#endif-------------------------------------------------------------  SeqStack.c  ---------------------------------------------------------#include "SeqStack.h"/********栈的初始化*********/SeqList InitSeqStack()    {     SeqStack *stack = NULL;     stack = (SeqStack*)malloc (sizeof(SeqStack));     memset(stack->base,0,sizeof(void *)*MAXSIZE);     stack->size = 0;     return stack;    }/*********压栈操作*********/void PushSeqStack(SeqList stack,void *data)    {      /***vs12不支持***/     SeqStack *myStack = (SeqStack*)stack;     if (NULL == stack || NULL == data)     {      return;     }      if (myStack->size > MAXSIZE)      {       return;      }      myStack->base[myStack->size++] = data;    return;    }/*********弹栈操作********/void PopSeqStack(SeqList stack)    {    SeqStack *myStack = NULL;    if (NULL == stack)        {         return;        }    myStack = (SeqStack*)stack;    if (myStack->size<0)    {    return;    }    //myStack->base[myStack->size--];    myStack->size--;    return;    }/*********获取栈顶元素*********/void *GetTopSeqStack(SeqList stack)    {    SeqStack *mPstack = NULL;     if (NULL == stack)     {      return NULL;     }     mPstack = (SeqStack *)stack;     if (mPstack->size <= 0)     {      return NULL;     }    return mPstack->base[mPstack->size-1];    }/*********销毁栈操作*********/void DestorySeqStack(SeqList stack)    {    if (NULL == stack)    {     return;    }    free (stack);    stack = NULL;    return;    }/**********获取栈大小********/void GetLenSeqStack(SeqList stack)    {      SeqStack *mPtr = NULL;      if (NULL == stack)      {       return;      }      mPtr = (SeqStack *)stack;      if (mPtr->size <= 0)      {       return;      }      printf ("%d\n",mPtr->size);    }-----------------------------------------------------------------  main.c  --------------------------------------------------------------------#include "SeqStack.h"typedef struct Person    {      char name[24];      int age;    }Seqnode;void muFunc()    {    SeqStack *mPtr = NULL;    Seqnode s1 = {"lixiaogang",24};    Seqnode s2 = {"wangzhe",21};    Seqnode s3 = {"huatianc",23};    Seqnode s4 = {"huppu",22};    Seqnode s5 = {"suomi",25};    /***初始化链表**/    mPtr = InitSeqStack ();    PushSeqStack (mPtr,&s1);    PushSeqStack (mPtr,&s2);    PushSeqStack (mPtr,&s3);    PushSeqStack (mPtr,&s4);    PushSeqStack (mPtr,&s5);    GetLenSeqStack (mPtr);    PopSeqStack (mPtr);    PopSeqStack (mPtr);    PopSeqStack (mPtr);    PopSeqStack (mPtr);    PopSeqStack (mPtr);    GetTopSeqStack (mPtr);    GetLenSeqStack (mPtr);    DestorySeqStack (mPtr);#if 0    /**************/    /*********弹栈操作********/    void PopSeqStack(SeqList stack);    /*********获取栈顶元素*********/    void *GetTopSeqStack(SeqList stack);    /*********销毁栈操作*********/    void DestorySeqStack(SeqList stack);#endif    }int main(void)   {    muFunc();    system("pause");    return 0;   }
1 0
原创粉丝点击