| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 426 人关注过本帖
标题:我遇到的链表问题
只看楼主 加入收藏
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
结帖率:90.63%
收藏
已结贴  问题点数:2 回复次数:2 
我遇到的链表问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
enum BOOL{False,True};
typedef struct Lnode       //定义节点结构
{
    char  data;               //数据域
    struct Lnode *next;       //后向指针
}LNode;
int conversion(LNode *pi);
void initial(LNode *);    //初始化一个堆栈
void  push_linkstack(LNode *,char);       //将一个元素入栈
BOOL pop_linkstack(LNode *,char &);        //将一个元素出栈
void print_linkstack(LNode *); //显示栈中所有元素
char change(int n);
int Match_Brackets(LNode *pi);
void main()
{
    LNode *ls, *js;
    char ch,j;
    int flag=1;
    BOOL temp;

    initial(ls);       //初始化堆栈S
    while(flag)
    {
        printf("请选择:\n");
        printf("1.显示栈中所有元素\n");
        printf("2.入栈\n");
        printf("3.出栈\n");
        printf("4.进行进制转换\n");
        printf("5.判断括号是否配对\n");
        printf("6.退出程序\n");
        scanf(" %c",&j);
        switch(j)
        {
        case '1':
            system("cls");
            printf("栈中元素如下:");
            print_linkstack(ls);
            break;
        case '2':
            system("cls");
            printf("请输入要入栈的元素(一个字符):");
            scanf(" %c",&ch);   //输入要入栈的字符
            push_linkstack(ls,ch);//入栈
        //    print_linkstack(ls);
            break;
        case '3':
            system("cls");
            temp=pop_linkstack(ls,ch);  //出栈
            if(temp==True)
            {
                printf("出栈一个元素:%c\n",ch);//若栈不空,显示出栈的元素
                printf("栈中剩下的元素为:");
                print_linkstack(ls);
            }
            else printf("堆栈为空!\n");//否则堆栈为空
            break;
        case '4':
            system("cls");
            initial(js);
            conversion(js);
            break;
        case '5':
            system("cls");
            initial(js);
            getchar(" ");
            Match_Brackets(js);
            break;
        default:flag=0;
            printf("程序结束,按任意键退出!\n");
        }
    }
    system("pause");
}   
//函数功能:生成空栈
void initial(LNode *pi)
{
    pi=NULL;   //栈顶指针初始化为NULL
}
//函数功能:进栈
void push_linkstack(LNode *pi,char ch)
{
    //入栈,由于采用链式结构,一般不会产生栈满的情况
    LNode *po;
    po=(LNode *)malloc(sizeof(LNode *));//生成一个新节点
    po->data=ch;                     //赋值
    po->next=pi;                  //新节点的后向指针指向原栈顶节点
    pi=po;                          //站顶指针指向新节点
}
//函数功能:出栈
BOOL pop_linkstack(LNode *pi,char &e)
{
    //出栈,成功返回True,并用e返回该元素值,失败返回False
    LNode *po;
    po=pi;
    //pi=po->next;                  //栈顶指针指向下一个节点
    if(po==NULL) return False;    //栈已空
    else {
        pi=po->next;
        e=po->data;
        return True;
    }                  
}
//函数功能:显示栈中的元素
void print_linkstack(LNode *p)   
{
    //显示栈中所有元素
    if(p==NULL) printf("堆栈为空!\n");//栈为空
    else  {
//        printf("堆栈所有元素:");
        while(p!=NULL)                       //否则显示栈中所有元素
        {
            printf(" %c",(*p).data);//什么错误??调试在这就出现错误了,其他没问题
            p=p->next;
        }
        printf("\n");
    }
}
//函数功能:进行进栈转换
int conversion(LNode *pi)
{
    int n, e,flag=0;
    char ch;
    printf("输入要转化的十进制数:\n");
    scanf("%d", &n);
    printf("要转化为多少进制:2进制、8进制、16进制 (填数字)!\n");
    scanf("%d", &flag);
    printf("将十进制数%d转化为%d进制是:\n", n, flag);
    while(n)
    {
        e=n%flag;
        ch=change(e);
        push_linkstack(pi, ch);//入栈
        n=n/flag;
    }
    print_linkstack(pi);
    return 0;
}
char change(int n)
{
    if(0==n) return '0';
    if(1==n) return '1';
    if(2==n) return '2';
    if(3==n) return '3';
    if(4==n) return '4';
    if(5==n) return '5';
    if(6==n) return '6';
    if(7==n) return '7';
    if(8==n) return '8';
    if(9==n) return '9';
    if(10==n) return 'A';
    if(11==n) return 'B';
    if(12==n) return 'C';
    if(13==n) return 'D';
    if(14==n) return 'E';
    if(15==n) return 'F';
}

int Match_Brackets(LNode *pi)
{
    int i=0;
    char ch[100] , x=0;
    printf("请输入需要检查一个字符串或一个表达式:");
    gets(ch);
    while (ch[i]!='\0')
    {
        if  ((ch[i]=='(')||(ch[i]=='[') ||(ch[i]=='{'))
            push_linkstack(pi , ch[i]) ;
        else if  (ch[i]==']')
        {
            pop_linkstack(pi,x);
            if( x != '[')
            {
                printf("'['括号不匹配\n") ;
                return False  ;
            }
        }
        else if  (ch[i]=='}')
        {
            pop_linkstack(pi,x);
            if( x != '{')
            {
                printf("'['括号不匹配\n") ;
                return False  ;
            }
        }
        else if  (ch[i]==')')
        {
            pop_linkstack(pi,x);
            if(x!='(')
            {
                printf("'('括号不匹配\n") ;
                return False;
            }
        }
        i++;
    }//end of while
    if  (pi!=NULL)
    {
        printf("括号数量不匹配!\n") ;
        return False;
    }
    else
    {
        printf("括号匹配或者没有括号!\n");
        return True  ;
    }
}
/*
3和4有错误
*/

我已经找出了错误的位置,但不知道怎么修改,求指导
搜索更多相关主题的帖子: False 
2013-05-11 07:05
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:2 
最好给出错误实例,以便找错和调试。
2013-05-11 09:53
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:0 
po=(LNode *)malloc(sizeof(LNode *));//生成一个新节点
  po=(LNode *)malloc(sizeof(LNode));//生成一个新节点
2013-05-11 10:02
快速回复:我遇到的链表问题
数据加载中...
 
   



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

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