码迷,mamicode.com
首页 > 其他好文 > 详细

栈的操作

时间:2015-04-13 00:02:24      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

 学习了数据结构之的顺序表与链表之后,再去接触栈的操作,觉得简单多了。自己就想用栈来实现下实际功能。但是遇到了麻烦(对于初学者来说),不管结果怎样,这都是一次成长的过程,虽然现在问题没有解决,但是我先把他以微博的形式记录下来,以遍我在以后能解决它。

 

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include"string.h"
typedef char NoteType;
//#include"LinkStack.h"
int Match(NoteType e,NoteType ch);
typedef struct
{
    NoteType ch[50];
    int top;
}LinkStack;
void PushStack(LinkStack s,NoteType e)
{
    if(s.top<50)
    {    
        s.ch[s.top]=e;
        s.top++;
    }
    else
    return ;
} 
void  PopStack(LinkStack s,NoteType *e)
{
    if(s.top!=0)
    {    *e=s.ch[s.top];
        s.top--;
    }
    else
    return ;
}
int StackEmpty(LinkStack s)
{
    if(s.top==0)
        return 1;
    else
        return 0;
}
NoteType GetTop(LinkStack s,NoteType *e)
{
    *e=s.ch[s.top];
    return *e;
}
 main()
{
    LinkStack s;
    NoteType ch[50];
    char *p;
    NoteType e;
    printf("输入括号:((),{},[])\n");
    gets(ch);
    p=ch;
    while(*p)
    {
        switch(*p)
        {
            case(:
            case[:
            case{:
                PushStack(s,*p);
                
                break;
            case):
            case]:
            case}:
                if(StackEmpty(s))
                {
                    printf("在第个括号前缺少左括号。\n");
                    return 0;
                }
                else
                {
                    GetTop(s,&e);
                    if(Match(e,*p))
                    {
                        PopStack(s,&e);
                    }
                    else
                    {
                        printf("左右括号不匹配。n");
                        return 0;
                    }
                }
            default:
                p++;
        }
    
    }
    if(StackEmpty(s))
    {
        printf("已匹配。\n");
    }
    else
    {
        printf("第个括号没有右括号\n");
    }
}
int Match(NoteType e,NoteType ch)
{
    if(e==(&&ch==))
        return 1;
    else if(e==[&&ch==])
        return 1;
    else if(e=={&&ch==})
        return 1;
    else
        return 0;
}

懂得大神可以帮我看看,我属于这方面的小白。

栈的操作

标签:

原文地址:http://www.cnblogs.com/dawntodusk/p/4420845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!