1. #define MAX_SIZE 255
    2. #define true 1
    3. #define false 0
    4. typedef struct {
    5. int id;
    6. char * name;
    7. }ElementType;
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "Element.h"
    4. //栈的顺序存储方式
    5. typedef struct SeqStack{
    6. ElementType elements[MAX_SIZE];//顺序栈中用来存放数据元素的数组
    7. int top;//栈顶(数组中的下标),结果为-1,则证明栈为空
    8. int length;//当前栈的元素个数
    9. }SeqStack;
    10. //初始化栈
    11. void InitSeqStack(SeqStack *seqStack);
    12. //入栈操作,返回压入栈的结果(true/false)
    13. int PushSeqStack(SeqStack *seqStack,ElementType element);
    14. //以指针的方式返回出栈的元素。返回值为出栈的结果(true/false)
    15. int PopSeqStack(SeqStack * seqStack,ElementType* element);
    16. //清空栈
    17. void ClearseqStack(SeqStack * seqStack);
    18. // 栈是否为空 top==-1
    19. //返回栈顶元素
    20. void PopSeqTop(SeqStack *seqStack,ElementType *element);
    1. #include "SeqStack.h"
    2. //初始化栈
    3. void InitSeqStack(SeqStack *seqStack){
    4. seqStack->top=-1;//栈顶一定是指向-1的下标
    5. seqStack->length=0;
    6. }
    7. //入栈操作,返回压入栈的结果(true/false)
    8. int PushSeqStack(SeqStack *seqStack,ElementType element){
    9. if(seqStack->top==MAX_SIZE-1){
    10. printf("满栈,压栈操作失败");
    11. return false;
    12. }
    13. seqStack->top++;//栈顶指针加1,以便加入新的元素
    14. seqStack->elements[seqStack->top]=element;
    15. seqStack->length++;
    16. return true;
    17. }
    18. //以指针的方式返回出栈的元素。返回值为出栈的结果(true/false)
    19. int PopSeqStack(SeqStack * seqStack,ElementType* element){
    20. if(seqStack->top==-1){
    21. printf("空栈,出栈失败\n");
    22. return false;
    23. }
    24. *element=seqStack->elements[seqStack->top];//返回栈顶指向的元素
    25. seqStack->top--;
    26. seqStack->length--;
    27. return true;
    28. }
    29. //清空栈
    30. void ClearseqStack(SeqStack * seqStack){
    31. seqStack->top=-1;
    32. seqStack->length=0;
    33. }
    34. //返回栈顶元素
    35. void PopSeqTop(SeqStack *seqStack,ElementType* element){
    36. //判断栈是否为空
    37. if(seqStack->top==-1){
    38. printf("空栈,栈顶元素为空\n");
    39. element = NULL;
    40. return;
    41. }
    42. *element=seqStack->elements[seqStack->top];
    43. printf("栈顶元素是:%d\t%s\n",element->id,element->name);
    44. }
    #include <iostream>
    using namespace std;
    #include "SeqStack.h"
    
    ElementType datas[]={
        {1,"哈哈哈"},
        {2,"哇哇哇"},
        {3,"呵呵呵"},
        {4,"啦啦啦"}
    };
    
    
    void TestSeqStack();
    
    
    
    int main(){
        TestSeqStack();
    
    }
    
    
    
    void TestSeqStack(){
        SeqStack * stack=(SeqStack *)malloc(sizeof(SeqStack));
        ElementType *element=(ElementType *)malloc(sizeof(ElementType));
    
        InitSeqStack(stack);
        for(int i=0;i<4;i++){
        printf("当前入栈:%d\t%s\n",datas[i].id,datas[i].name);
        PushSeqStack(stack,datas[i]);
        }
    
        PopSeqStack(stack,element);
        printf("当前出栈的元素:%d\t%s\n",element->id,element->name);
    
        PopSeqTop(stack,element);
    
    }