-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstack.c
146 lines (111 loc) · 2.21 KB
/
stack.c
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include<stdio.h>
#include<stdlib.h>
/*******************************************
1、定义了堆栈的指针数据结构linkStack,包
括了top、count两个变量 top用来指向当前的数据
结,count对堆栈的数据结进行统计。
2、定义了数据结这个数据结构stackNode,包
括了data和 struct* next
3、数据结这个概念是自己定义的,相当于链表
中的结点。
4、此链表数据结构包括了、createStack、
push()、pop()、print()、printlength()五个函数
********************************************/
typedef char datatype;
typedef int status;
typedef struct stackNode{
datatype data;
struct stackNode* next;
}stackNode;
typedef struct topPtr{
stackNode *top;
int count;
}linkStack;
status createStack(linkStack **ptr)
{
(*ptr) =(linkStack *)malloc(sizeof(linkStack));
(*ptr)->top = (stackNode *)malloc(sizeof(stackNode));
(*ptr)->top = NULL;
(*ptr)->count = 0;
return 1;
}
status push(linkStack **ptr,datatype data)
{
stackNode* p;
p = (stackNode *)malloc(sizeof(stackNode));
p->data = data;
p->next = (*ptr)->top;
(*ptr)->top = p;
(*ptr)->count += 1;
return 1;
}
status pop(linkStack **ptr)
{
stackNode *temp;
temp = (*ptr)->top->next;
free((*ptr)->top);
(*ptr)->top = temp;
(*ptr)->count--;
return 1;
}
status printStack(linkStack *ptr)
{
linkStack* p;
p = ptr;
while(p->top)
{
printf("%d\n",p->top->data);
p->top = p->top->next;
}
return 1;
}
status printLength(linkStack *ptr)
{
return ptr->count;
}
status printLength(linkStack *ptr);
status printStack(linkStack *ptr);
status pop(linkStack **ptr);
status push(linkStack **ptr,datatype data);
status createStack(linkStack **ptr);
void main()
{
linkStack *ptr;
int i = 0;
char str[15];
createStack(&ptr);
printf("请输入一个字符串\n");
gets(str);
while(str[i] != '\0')
{
if(str[i] == '[' || str[i] == '{' || str[i] == '(')
{
push(&ptr,str[i]);
i++;
if(str[i] == ']' || str[i] == '}' || str[i] == ')')
{
pop(&ptr);
i++;
}
}
else if(str[i] == ']' || str[i] == '}' || str[i] == ')')
{
printf("匹配失败");
}
else{
i++;
}
}
/*
push(&ptr,1);
push(&ptr,2);
push(&ptr,3);
push(&ptr,4);
push(&ptr,5);
push(&ptr,6);
pop(&ptr);
pop(&ptr);
printStack(ptr);
printf("the length of the stack is %d\n",printLength(ptr));
*/
}