| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 419 人关注过本帖
标题:求一个栈的操作和实现程序
只看楼主 加入收藏
狼贲
Rank: 2
等 级:论坛游民
帖 子:17
专家分:13
注 册:2012-10-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求一个栈的操作和实现程序
求一个栈的操作和实现程序
2012-10-30 19:42
小小小火柴
Rank: 5Rank: 5
来 自:江西赣州
等 级:职业侠客
威 望:3
帖 子:141
专家分:337
注 册:2012-9-28
收藏
得分:7 
首先,这个程序的作用只是判断()是否配对,并没有其他作用!

#include<iostream>
using namespace std;
class link
{
public:
    char data;
    link *next;
};
class linkstack
{
public:
    link *top;
    void inistack()//栈的初始化
    {
        top=new link;
        top->next=NULL;
    }
    void push(char x)//进栈
    {
        link *s=new link;
        s->data=x;
        s->next=top->next;
        top->next=s;
    }
    void pop()//退栈
    {
        link *s=top->next;
        if(s!=NULL)
        {
            top->next=s->next;
            delete s;
        }
    }
    char gettop()
    {
        if(top->next!=NULL)
            return (top->next->data);
        else return NULL;
    }
    bool empty()
    {
        if(top->next==NULL)
            return true;
        else return false;
    }
    int yn()
    {
        char c;
        int sign=1;
        inistack();
        cout<<"请输入表达式,并以=结束:";
        c=getchar();
        while(c!='=')
        {
            switch(c)
            {
            case '('://扫描到'('入栈
                push(c);
                break;
            case ')':
                {if(gettop()=='(')
                     pop();
                 else
                     sign=0;
                 break;}
            }
            if(sign==0)
                break;
            else
                c=getchar();

        }
        if(!empty())
            sign=0;
        return sign;
    }
    void judgeout(int a)
    {
        if(a==1)
            cout<<"括号配对正确\n";
        else if(a==0)
            cout<<"括号配对错误\n";
    }

};
void main()
{   int n;
    linkstack s;
    n=s.yn();
    s.judgeout(n);
}

   好好学习!
2012-10-30 21:07
凌云飞翔
Rank: 5Rank: 5
来 自:河北
等 级:职业侠客
威 望:6
帖 子:98
专家分:388
注 册:2012-4-7
收藏
得分:7 

   建栈时要多注意指针的传送,取地址等细节方面的东西。。。

#include  <stdio.h >
#include <stdlib.h>
#define  OVERFLOW   -2
#define  OK  1
#define STACK_INIT_SIZE   100
#define  STACKINCREMENT  10  
typedef  char SElemType  ;
typedef   int Status   ;   
typedef struct {  
      SElemType  *base   ;
      SElemType  *top    ;
      int  stacksize  ;
}  SqStack    ;
 Status    StackEmpty  (SqStack  s  )
{ if  (s.base==s.top)  return 1;
    else  return 0  ;
} //stackempty
Status  InitStack  (SqStack  &s)
{  s.base=(SElemType  *)malloc (STACK_INIT_SIZE *sizeof (SElemType ))  ;
    if (!s.base)  exit (OVERFLOW )   ;
     s.top = s.base ;
     s.stacksize =STACK_INIT_SIZE ;
     return  OK  ;
}//initstack  
Status  Push (SqStack &s  ,SElemType e  )
{  if (s.top -s.base >=s.stacksize )//栈满,追加存储空间
{   s.base = (SElemType *) realloc (s.base,(s.stacksize +STACKINCREMENT)
                                    *sizeof (SElemType) )  ;
        if (!s.base) exit  ( OVERFLOW ) ;//存储分配失败
        s.stacksize +=STACKINCREMENT  ;
}
         *s.top++=e  ;
        return  OK  ;  
}//push  
 Status Pop  (SqStack  &s  , SElemType *e)
 { if  (s.top==s.base  ) return  0  ;

  *e =*--s.top ;
  return  OK  ;
 }// pop
 Status GetTop (SqStack s  ,SElemType  *e )
 {  if (s.top ==s.base ) return  0   ;
*e = *(s.top-1)  ;
 return  1 ;
 }//gettop
main ()
{  int  i=0  ;
 SqStack    s  ;
    char a[20]={0}  , ch ,e  ;
   InitStack  ( s) ;
printf ("请输入括号且长度不能超过20 :\n")  ;
while ((ch=getchar())!='\n')  
{   a[i]=ch  ;
     i++  ;  
 
}
 for  (i=0 ;a[i]!='\0' ;i++)  
 {  switch  (a[i])
 {        case '(' :  ;
         case '[' : ;
         case '{' :
             { Push (s ,a[i])  ; break  ; }
         case ')' : ;
         case '}' : ;
         case ']' :   
                   if  (StackEmpty  (s ))   
                 {printf ("括号不匹配\n")  ; return  ;}
                else    {  GetTop (s,&e)  ;
                   if  ((a[i]-e==1)||(a[i]-e==2))
                   { Pop (s,&e)  ;  break ;}
                 
             }

 }
 }
   if ( StackEmpty (s))  
   printf ("括号匹配\n") ;
    else  printf ("括号不匹配\n") ;
}
 
        
  
2012-11-01 00:29
红晓可乐
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2012-11-1
收藏
得分:7 
2012-11-01 18:12
狼贲
Rank: 2
等 级:论坛游民
帖 子:17
专家分:13
注 册:2012-10-28
收藏
得分:0 
回复 4楼 红晓可乐
谢谢。
2012-11-03 08:11
gaolongtou
Rank: 2
等 级:论坛游民
帖 子:79
专家分:42
注 册:2012-9-25
收藏
得分:0 
2012-11-03 08:44
快速回复:求一个栈的操作和实现程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045724 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved