目录
一、头文件
二、栈的结构
三、初始化
四、判断是否为空
五、判断是否为满
六、输出栈
七、进栈
八、出栈
九、测试代码
十、括号匹配代码
十一、main函数
十二、总结
一、头文件
#include#include #include #define MAXSIZE 10
二、栈的结构
typedef struct CharStack
{
int top;
int data[MAXSIZE];
}*CharStackPtr;
三、初始化
//初始化
CharStackPtr initStack()
{
CharStackPtr newPtr = (CharStackPtr)malloc(sizeof(struct CharStack));
newPtr->top = -1;
return newPtr;
}
四、判断是否为空
//判断是否为空
int isEmpty(CharStackPtr newStack)
{
if(newStack->top == -1)
return 0;
else
return 1;
}
五、判断是否为满
//判断是否为满栈
int isFull(CharStackPtr newStack)
{
if(newStack->top >= MAXSIZE-1)
return 1;
else
return 0;
}
六、输出
//输出
void outputStack(CharStackPtr newStack)
{
int i;
for(;i<=newStack->top;i++)
{
printf("%c ",newStack->data[i]);
}
printf("rn");
}
七、进栈
//进栈
void push(CharStackPtr newStack,int newData)
{
//判断栈满
if(isFull(newStack))
{
printf("The stack is full.n");
return ;
}
newStack->top++;
newStack->data[newStack->top] = newData;
}
八、出栈
//出栈
int pop(CharStackPtr newStack)
{
//判断栈空
if(!isEmpty(newStack))
{
printf("The stack is empty.n");
return ;
}
newStack->top--;
return newStack->data[newStack->top+1];//返回删除的元素
}
九、测试代码
//测试
void pushPopTest() {
printf("---- pushPopTest begins. ----rn");
CharStackPtr tempStack = initStack();
printf("After initialization, the stack is: ");
outputStack(tempStack);
char ch;
for (ch = 'a'; ch < 'm'; ch ++) {
printf("Pushing %c.rn", ch);
push(tempStack, ch);
outputStack(tempStack);
}
int i;
for (i = 0; i < 3; i ++) {
ch = pop(tempStack);
printf("Pop %c.rn", ch);
outputStack(tempStack);
}
printf("---- pushPopTest ends. ----rn");
}
十、括号匹配代码
//括号匹配
int bracketMatching(char*newString,int length)
{
CharStackPtr tempStack = initStack();
push(tempStack,'#');
char tempChar,tempPopedChar;
int i = 0;
for(;i
十一、main函数
int main()
{
pushPopTest();
// bracketMatchingTest();
return 0;
}
测试结果
十二、总结
总的来说,关于栈的知识点并不难,主要是要特别记住栈空和栈满的条件,以及要注意数组下标,同时要尽量的把代码写的规范一些,提高可读性。



