单连表的建立,把'a'--'z'26个字母插入到链表中,并且逆序,还要打印!

构建并逆序字母链表
本文演示如何使用C语言创建包含a到z的字母链表,并实现逆序输出。

#include"stdio.h"

#include"stdlib.h"

 

struct node        //结点

{

   char cha;

   struct node *next;

}*a_to_z;

 

struct node * insert(struct node *p)//插入b,c...z构建链表

{

   int a = 97;

   while(a<=121)

    {

   struct node *new;

   new = (struct node *)malloc(sizeof(struct node));

   a++;

   new->cha = a;

   new->next = NULL;

   p->next = new;

    p= p->next;

    }

}

 

void my_printf(struct node *p)//打印

{

   while(p != NULL)

    {

       printf("%c ",p->cha);

       p= p->next;

    }

   printf("\n");

}

 

struct node * rever(struct node *p)//逆序

{

   int i = 0;

   int count = 0;

   struct node *head;

   struct node *last;

   head = last = p;

   while(last->next!=NULL)

    {

       last = last->next;

       count++;

    }

   count++;

   struct node **array=(struct node **)malloc(sizeof(struct node*)*count);

   for(i = 0;i < count;i++,head = head->next)//将结点放在数组中

    {

       array[i] = head;

    }

   for(i = (count-1);i>0;i--)//将数组中语速逆序连接

    {

       array[i]->next = array[i-1];

    }

   array[0]->next = NULL;

   return array[count-1];

}

 

int main()

{

   struct node *reverse;

   a_to_z = (struct node *)malloc (sizeof(struct node));

   a_to_z->cha = 'a';

   a_to_z->next = NULL;

   insert(a_to_z);

   printf("建立链表:\n");

   my_printf(a_to_z);

   printf("逆序并输出:\n");

   reverse = rever(a_to_z);

   my_printf(reverse);

   return 0;

}

题目描述 已知有一个乱序的字符序列L,序列中的字符可能是英文字母、数字字符或其它字符,字符的个数未知,每个字符之间用空格分开。字符序列用“-1”作为输入结束标志,这里你要把-1当做一个字符串对待,并且不算作字符序列中的元素。如下即为一个合法的字符序列:“a c 3 b a d 6 , & j m 8 7 2 V -1”。你的任务是将这个字符序列拆分为三个独立的序列A、B和C,其中序列A存放序列L中的字母,序列B存放序列L中的数字,序列C存放序列L中的其他字符,然后,将序列A、B和C分别按照ASCII码的大小关系进行升序排序。最终序列L将变为空序列。 要求: 建立四个单链表,分别存储序列L、A、B、C中的元素。字符序列的输入用“-1”作为结束标志。建立链表L时,建议使用scanf(“%s”,s);来读取字符序列中的字符,即把单独的字符看做一个字符串读取。当L建立后,你要按照问题描述中所述,将L拆分为A、B、C三个链表,然后对每个链表都进行排序,这部分的操作都应该是对指针进行修改,而不是删除节点与建立新节点。在程序结束前要释放链表A、B、C中的所有节点。 输入 一个乱序的字符序列,序列元素的个数未知,以输入“-1”结束,输入“-1”前可能没有其它元素,每个字符序列占一行。 输出 链表A中的元素,占一行;然后是链表B中的元素,占一行。最后是链表C中的元素,占一行。每行的每个元素后有一个空格,注意最后一个元素后只有换行符,如果某个链表为空则,则输出“There is no item in X list.” 数据最多的测试用例节点数在100这个数量级。 请注意输入输出格式。 样例输入 Copy Sample 1: a c 3 b a d 6 , & j m 8 7 2 V -1 Sample 2: z m v 1 a K 2 m p 9 a 0 a d -1 样例输出 Copy Sample 1: The list A is: V a a b c d j m The list B is: 2 3 6 7 8 The list C is: & , Sample 2: The list A is: K a a a d m m p v z The list B is: 0 1 2 9 There is no item in C list.
最新发布
04-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值