1

例:「This is an example」を「example an is This」に変換する必要があります。各ノードの情報として 1 文字を格納する必要があります。これを行った後、文全体を逆にすることができます(つまり、->「elpmaxe na sihT」)。次に、各単語を逆にして取得するにはどうすればよいですか。「example an is This」

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct node {
    struct node *ptr;
    char info;
};

struct node *first,*ic;
struct node * insertn(int n,struct node * first)
{

    struct node *temp,*cur;
    temp=(struct node *)malloc(sizeof(struct node));

    temp->info=n;
    temp->ptr='\0';
    if(first=='\0')
    {

        return temp;
    }
    else{
        cur=first;
        while(cur->ptr!='\0')
        cur=cur->ptr;
        cur->ptr=temp;
        return first;
    }
}
void disp( struct node *first)
{
    printf("here");
    struct node *cur;
    cur=first;
    while(cur!='\0')
    {
        printf("%c",cur->info);
        cur=cur->ptr;

    }
}
void rev(struct node * p)
{
    if(p->ptr=='\0')
    {

        first =p;
        return;
     }

     rev(p->ptr);

     struct node *q=p->ptr;
     q->ptr=p;
     p->ptr='\0';
 }

main()
{   
    char n;
    int i=0;

    first='\0';
    ic='\0';

    while(i<7)
    {

        i++;
        printf("Enter element:");
        scanf("%c",&n);
        first=insertn(n,first);
    }
    printf("ELEMENTS OF LIST BEFORE REV:");
    disp(first);
    rev(first);

    printf("\n\nELEMENTS OF LIST AFTER REV:");
    disp(first);

}
4

2 に答える 2

0

各単語を読み取り、それを char 配列としてノードに追加します。次に、リンクされたリストを最初から最後まで読みます。逆文になってしまいます。

-------------------------------
+ *prev + "This" + *next +
-------------------------------

------------------------
+ *prev + "is" + *next +
------------------------

------------------------
+ *prev + "an" + *next +
------------------------

-----------------------------
+ *prev + "example" + *next +
-----------------------------

*prev を使用して最後から読みます。

于 2013-07-23T11:11:14.163 に答える
0

より良い方法は、各ノードの情報として 1 つの単語を格納することです。このような:

#define LEN 10

struct node{
    struct node *ptr;
    char info[LEN+1]; // the length of each word cannot be more than LEN
};

また

struct node{
    struct node *ptr;
    char *info;
};

次に、 rev 関数を使用して目標を達成できます。

ノードの構造体を変更したくない場合は、空欄に従って文を単語に分割する必要があります。最初に各単語を逆にしてから、文全体を逆にすることができます。

このように:「これは例です」->「sihT si na elpmaxe」->「例はこれです」

于 2013-07-23T13:56:23.467 に答える