第1个回答 2012-11-12
// 实现下面三个函数实现将一个链表中的26个英文字母由小写变为大写,并各自输出。
//------------
//CreateList() 创建一个链表纪录26个小写的英文字母
//ListTransfer() 将链表中个各个节点有小写变为大写
//Listprint() 输入链表
//------------
# include <stdio.h>
# include <stdlib.h>
typedef struct A
{
char c;
struct A *pnext;
}YW,*PYW;
PYW CreateList()
{
int i=0;
PYW head=NULL,pnew=NULL,pwei=NULL;
head = (PYW)malloc(sizeof(YW));
if(!head)
{
printf("内存分配失败!!!\n");
exit(0);
}
head->c = 0;
head->pnext = NULL;
pwei = head;
for(i='a';i<'z'+1;i++)
{
pnew = (PYW)malloc(sizeof(YW));
if(!pnew)
{
printf("内存分配失败!!!\n");
exit(0);
}
pnew->c = i;
pnew->pnext = NULL;
pwei->pnext = pnew;
pwei = pnew;
}
return head;
}
void ListTransfer(PYW head)
{
PYW p = head->pnext;
while(p)
{
p->c -= 32;
p = p->pnext;
}
return;
}
void ListPrint(PYW head)
{
PYW p = head->pnext;
while(p)
{
printf("%c ",p->c);
p = p->pnext;
}
return;
}
int main(void)
{
PYW p = NULL;
p = CreateList();
ListPrint(p);
printf("\n");
ListTransfer(p);
ListPrint(p);
printf("\n");
return 0;
}
第2个回答 2012-11-11
楼上代码中第8行代码有误,应该写成:
void CreatList(LinkList *h)
下面是我写的:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
char c;
struct node *next;
}LinkList;
void *CreateList()
{
LinkList *p1,*p2,*head;
int i;
char ch;
p1=p2=head=(LinkList *)malloc(sizeof(LinkList));
p1->c=97;
for(i=0;i<=24;i++)
{
p1=(LinkList *)malloc(sizeof(LinkList));
p1->c=98+i;
p2->next=p1;
p2=p1;
}
return head;
}
void Listprint(LinkList *head)
{
LinkList *p;
int i;
p=head;
for(i=0;i<=25;i++)
{
printf("%c ",p->c);
p=p->next;
}
printf("\n\n");
}
void *ListTransfer(LinkList *head)
{
LinkList *p;
int i;
p=head;
for(i=0;i<=25;i++)
{
p->c=p->c-32; //转化为大写
p=p->next;
}
return head;
}
void main()
{
LinkList *head;
head=CreateList();
printf("Output words a~z in lowercase\n");
Listprint(head); //在ListTransfer函数调用之前调用Listprint函数,输出a~z小写字母
head=ListTransfer(head);
printf("Output words A~Z in capital\n");
Listprint(head); //在ListTransfer函数调用之后调用Listprint函数,输出转换后a~z大写字母
printf("\n");
}