您的位置:首页 > 其它

两栈共享空间

2016-06-30 00:27 369 查看
 C++ Code 
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

#include<stdio.h>
#include"stdlib.h"
#include"string.h"
#include"math.h"
#include"time.h"

#define MAX   20

typedef struct

{

    int data[MAX];

    int top1;

    int top2;

} SqDoubleStack;

int InitStack(SqDoubleStack *s)

{

    s->top1 = -1;

    s->top2 = MAX;

    return 1;

}

int Push(SqDoubleStack *s, int i, int j)

{

    if (s->top1 + 1 == s->top2)

        return -1;

    if (j == 1)

        s->data[++s->top1] = i;

    else if (j == 2)

        s->data[--s->top2] = i;

    return 1;

}

int StackTraverse(SqDoubleStack s)

{

    int i;

    i = 0;

    while (i <= s.top1)

    {

        printf("%d", s.data[i++]);

    }

    i = s.top2;

    while (i < MAX)

    {

        printf("%d", s.data[i++]);

    }

    printf("\n");

    return 1;

}

int StackLength(SqDoubleStack s)

{

    int i;

    i = s.top1 + 1 + (MAX - s.top2);

    return i;

}

int Pop(SqDoubleStack *s, int *e, int j)

{

    if (j == 1)

    {

        if (s->top1 == -1)

            return -1;

        else

            *e = s->data[s->top1--];

    }

    if (j == 2)

    {

        if (s->top2 == MAX)

            return -1;

        else

            *e = s->data[s->top2--];

    }

    return 1;

}

int StackEmpty(SqDoubleStack s)

{

    if ((s.top1 == -1) && (s.top2 == MAX))

        return 1;

    else

        return -1;

}

int ClearStack(SqDoubleStack *s)

{

    s->top1 = -1;

    s->top2 = MAX;

    return 1;

}

int main(void)

{

    int i;

    SqDoubleStack s;

    int e;

    if (InitStack(&s) == 1)

    {

        for (i = 1; i <= 5; i++)

            Push(&s, i, 1);

        for (i = MAX; i >= MAX - 2; i--)

            Push(&s, i, 2);

    }

    printf("栈中的元素为:");

    StackTraverse(s);

    printf("栈的长度为:%d\n", StackLength(s));

    Pop(&s, &e, 2);

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

    printf("栈是否为空(1为空, -1为非空)%d\n", StackEmpty(s));

    ClearStack(&s);

    printf("清空后栈是否为空(1为空, -1为非空)%d\n", StackEmpty(s));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: