| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 951 人关注过本帖
标题:求助!(利用栈)判断单链表中n个字符是否对称,运行时为啥产生了访问违例》 ...
只看楼主 加入收藏
mariadandan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-9-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
求助!(利用栈)判断单链表中n个字符是否对称,运行时为啥产生了访问违例》.《
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
        char ch;
        struct node*next;
        }linklist;
struct Stack
{
       char elements[100];
       int Top;
       };
linklist*head,*p,*q,*r;
Stack*S;
int n;
linklist*CREATLISTR();
void DELETE(linklist*p,linklist*head);
struct Stack*PUSHS(struct Stack*S,char E);
char POPS(struct Stack*S);

int main(void)
{
     int i,k;
     char ch2;
     S = NULL;
     printf("Enter n:\n");
     scanf("%d",&n);
     printf("Enter %d characters:\n",n);
     if(n>0)
     {
            head = CREATLISTR();
            p = head->next;
            for(k=1;k<=n/2;k++)
            {
                S = PUSHS(S,p->ch);
                r = p;
                p = p->next;
                DELETE(r,head);
                                }
            if(n%2!=0)
            {
                q = head->next;
                DELETE(q,head);
                }
            q = head->next;
            k = 0;
            for(i=1;i<=n/2;i++)
            {
                ch2 = POPS(S);
                if(q->ch!=ch2)
                {
                   printf("字符不对称!\n");
                   k++;
                   break;
                   }
                p = p->next;
                    }
            if(k==0)
               printf("字符对称!\n");           
            }
     else printf("Error!\n");
}
     
linklist*CREATLISTR()
{
       char ch3;
       int t=0;
       linklist*head ,*s,*r;
       head=(linklist*)malloc(sizeof(linklist)); /*生成头结点head*/
       r=head; /*尾指针指向头结点*/
       for(t=0;t<n;t++)
       {
            ch3=getchar();
            s=(linklist*)malloc(sizeof(linklist)); /*给新结点分配空间*/
            s->ch=ch3; r->next=s; /*新结点插入表尾*/
            r=s; /*尾指针r指向新的表尾*/
        }
        r->next=NULL;
        return head; /*返回表头指针*/
}

void DELETE(linklist*p,linklist*head)
{
       linklist*q;
       q=head;
       while(q->next!=p)
           q=q->next; /*查找*p的前趋结点*q*/
       q->next=p->next; /*删除结点*p*/
       free(p);
       }

struct Stack*PUSHS(struct Stack*S,char E)
{
       S->Top++;
       S->elements[S->Top]=E;
       return(S);
       }
      
char POPS(struct Stack*S)
{
       char temp;
       S->Top--;
       temp=S->elements[S->Top+1];
       return(temp);
       }
搜索更多相关主题的帖子: elements include Enter 
2011-09-26 16:04
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:10 
首先,main里面scanf("%d",&n);后面加上getchar();目的是清除缓冲区
其次,栈S并未分配内存,没有初始化,元素Top没有赋值就自增,错误。
将main中第三句S=NULL改为:
S=(Stack *)malloc(sizeof(Stack));
S->Top=0;


********多贴代码,少说空话*******
2011-09-26 16:40
statics
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:163
专家分:625
注 册:2011-8-29
收藏
得分:10 
路过

惟我独行...
2011-09-26 16:53
快速回复:求助!(利用栈)判断单链表中n个字符是否对称,运行时为啥产生了访问 ...
数据加载中...
 
   



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

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