西电数据结构上机题——分解单链表
【摘要】
西电数据结构的一道上机题,分解单链表,终于想清楚了,注意其中的缩短单链表的小细节。直接贴代码不细述。 下面展示一些 成功运行的代码。
#include<stdio.h>
#include&l...
西电数据结构的一道上机题,分解单链表,终于想清楚了,注意其中的缩短单链表的小细节。直接贴代码不细述。
下面展示一些 成功运行的代码
。
#include<stdio.h>
#include<malloc.h>
typedef char datatype;
typedef struct node
{ datatype data;
struct node *next;
}linklist;
void create(linklist*&);
void resolve(linklist*,linklist*,linklist*,linklist*);
void insert(linklist*,linklist*);
void print1(linklist*);
void print2(linklist*);
int main()
{ linklist *head,*letter,*digit,*other;
create(head);
print1(head);
letter=(linklist*)malloc(sizeof(linklist));//建立3个空循环链表
letter->next=letter;
digit=(linklist*)malloc(sizeof(linklist));
digit->next=digit;
other=(linklist*)malloc(sizeof(linklist));
other->next=other;
resolve(head,letter,digit,other);//调用分解单链表的函数
print2(letter);//输出循环链表
print2(digit);
print2(other);
}
//建立单链表
void create(linklist*&head)
{ datatype x;
linklist *s,*r;
head=new linklist;
r=head;
while((x=getchar())!='\n')
{
s=(linklist*)malloc(sizeof(linklist));
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
}
//在循环链表中插入
void insert(linklist*h,linklist*p)
{ linklist *q=h;
while(q->next!=h) q=q->next;
q->next=p;
p->next=h;
}
//输出单链表
void print1(linklist*head)
{ linklist *p=head->next;
while(p!=NULL)
{ printf("%c",p->data);
p=p->next;
}
printf("\n");
}
//输出循环链表
void print2(linklist*head)
{ linklist *p=head->next;
while(p!=head)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
//添加按字母、数字、其它字符分解单链表算法
void resolve(linklist*head,linklist*letter,linklist*digit,linklist*other)
{
linklist *p;
p=head->next;
while(p!=NULL)
{
head->next=head->next->next;
if((p->data>='A'&&p->data<='Z')||(p->data>='a'&&p->data<='z'))
{
insert(letter,p);
}
else if(p->data>='0'&&p->data<='9')
{
insert(digit,p);
}
else
{
insert(other,p);
}
p=head->next;
}
}
文章来源: zstar.blog.csdn.net,作者:zstar-_,版权归原作者所有,如需转载,请联系作者。
原文链接:zstar.blog.csdn.net/article/details/108655682
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)