|
|
#2
遮天云2010-10-14 10:45
程序代码:#include<stdio.h> 楼主看看我的,你的没细看#include<malloc.h> typedef struct linknode { char data; struct linknode *next; }nodetype; nodetype *cyccreate()//创建循环链表 { char data; int i=1; nodetype *h=NULL,*s,*t=NULL; printf("建立一个循环单链表\n"); while(1) { printf("请输入第%d个结点data阈值:",i); scanf("%c",&data); if(data=='0')//以零表示输入结束 break; if(i==1)//建立第一个结点 { h=(nodetype *)malloc(sizeof(nodetype)); h->data=data; h->next=NULL; t=h; } else//建立其余结点 { s=(nodetype *)malloc(sizeof(nodetype)); s->data=data; s->next=NULL; t->next=s; t=s;//t始终指向生成的循环单链表的最后一个结点 } fflush(stdin);//清除键盘缓存 i++; } if(t!=NULL) t->next=h;//将最后一个不是NULL的结点的next阈置为h return h; } void cycdisp(nodetype *h)//输出由h指向的单循环的所有data阈的值 { nodetype *p=h; printf("输出一个单循环链表\n"); if(p==NULL) { printf("链表为空\n"); return ; } while(p->next!=h) { printf("%4c",p->data); p=p->next; } printf("%4c\n",p->data); } void split(nodetype *heada,nodetype *headb,nodetype *headc) { char c; nodetype *ra,*rb,*rc,*p; p=heada->next; ra=heada; ra->next=NULL; rb=headb; rb->next=NULL; rc=headc; rc->next=NULL; while(p!=heada) { c=p->data; if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) { ra->next=p; ra=p; } else if(c>='0'&&c<='9') { rb->next=p; rb=p; } else { rc->next=p; rc=p; } p=p->next; } ra->next=heada; rb->next=headb; rc->next=headc; } void main() { nodetype *heada,*headb,*headc,*pointer,*q;//pointer为原链表的头结点 heada=cyccreate(); cycdisp(heada); q=heada; while(q->next!=heada) q=q->next; pointer=(nodetype *)malloc(sizeof(nodetype));//哨兵头结点 pointer->next=heada; heada=pointer; q->next=heada; headb=(nodetype *)malloc(sizeof(nodetype));//添加哨兵结点 headb->next=NULL; headc=(nodetype *)malloc(sizeof(nodetype));//添加哨兵结点 headc->next=NULL; split(heada,headb,headc); //分别输出整理后的节点 cycdisp(heada); cycdisp(headb); cycdisp(headc); } |
一个线性链表分割成为三个循坏链表 问题
原题目:已知由一个线性链表表示中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写程序将该线性链表分割成为三个循坏链表,其中每个循坏链表表示的线性表中均只含一类字符。
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
typedef struct LNode
{
char data;
struct LNode * next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n)
{
int i;
LinkList P;
L=(LinkList )malloc(sizeof(LNode));
L->data=0;
L->next=NULL;
for(i=0;i<n;i++)
{
P=(LinkList)malloc(sizeof(LNode));
scanf("%c",&P->data);
getchar();
P->next=L->next;
L->next=P;
}
}
void CreateList_C(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=L;
}
void LinkList_Divide(LinkList &L,LinkList &A,LinkList &B,LinkList &C)
{
LinkList p,q,r,s;
s=L->next;
A=(LinkList)malloc(sizeof(LNode));p=A;
B=(LinkList)malloc(sizeof(LNode));q=B;
C=(LinkList)malloc(sizeof(LNode));r=C;
while (s)
{
if ( isalpha (s->data) )
{
p->next=s;
p=s;
}
else if ( isdigit (s->data) )
{
q->next=s;
q=s;
}
else
{
r->next=s;
r=s;
}
}
p->next=A;
q->next=B;
r->next=C;
}
void main()
{
LinkList L,A,B,C,P,q;
CreateList_L(L,5);
do
{
P=L->next;
printf("%c ",P->data);
L=L->next;
}while(L->next!=NULL);
printf("\n");
CreateList_C(A);
CreateList_C(B);
CreateList_C(C);
LinkList_Divide(L,A,B,C);
P=A->next;
while(P!=A)
{
printf("%c ",P->data);
P=P->next;
}
printf("\n");
P=B->next;
do
{
printf("%c ",P->data);
P=P->next;
}while(P->next!=B);
printf("\n");
P=C->next;
do
{
printf("%c ",P->data);
P=P->next;
}while(P->next!=C);
printf("\n");
}
[ 本帖最后由 向阳的水仙 于 2010-10-13 21:19 编辑 ]
程序代码: