⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sun.c

📁 十字链表
💻 C
字号:
#include<stdio.h>
#include<malloc.h>
#define Max 50
typedef struct node
{
	int num[Max];
	int len;
	struct node *dp;
	struct node *rp;
}NODETYPE;

typedef struct
{
	int unit;
	NODETYPE *p;
}NUMTYPE;

NUMTYPE NUM[10];

void Order()
{
	int i;
	for(i=0;i<10;i++)
	{
		NUM[i].unit=i;
		NUM[i].p=NULL;
	}
}

void Changeorder(NODETYPE *s)
{
	int temp,i;
	for(i=0;i<s->len/2;i++)
	{
		temp=s->num[i];
		s->num[i]=s->num[s->len-i-1];
        s->num[s->len-i-1]=temp;
	}
}


NODETYPE *Sort(NODETYPE *s,int n)
{
	int i,j;
    NODETYPE *p,*q;
	for(i=0;i<n;i++)
	{
		for(p=s;p!=NULL;p=p->rp)
		{
			if(p->len<i+1) 
				p->num[i]=0;
			if(NUM[p->num[i]].p==NULL)
				NUM[p->num[i]].p=p;
			else
			{
				q=NUM[p->num[i]].p;
				while(q->dp!=NULL)
					q=q->dp;
				q->dp=p;
				q=q->dp;
			}
		}
		s=NULL;
		for(j=0;j<10;j++)
		{
			q=NUM[j].p;
			if(q!=NULL&&s==NULL)
			{
				s=q;
				p=s;
				q=q->dp;
				p->dp=NULL;//把dp置空,以备下次分配时正常使用
			}
			else if(q==NULL)
				continue;
			while(q!=NULL)
			{
				p->rp=q;
				p=p->rp;
				q=q->dp;
				p->dp=NULL;
			}
			NUM[j].p=NULL;//重新把数字数组的指针置空
		}
        p->rp=NULL;//否则形成死循环
	}
	return s;
}

main()
{
	NODETYPE *head,*p,*point;
	char c;
	int i,max=0;
	Order();
	printf("Please enter the nodes :\n");
	point=(NODETYPE *)malloc(sizeof(NODETYPE));
	point->len=0;
	head=point;
	p=head;
	while(c=getchar())
	{
		if('0'<=c&&c<='9')
			point->num[point->len++]=c-48;
		else
		{
			max=(max>point->len)?max:point->len;
			point->dp=NULL;
			Changeorder(point);
            if(c=='\n')
			{
				point->rp=NULL;
				break;
			}
		    point=(NODETYPE *)malloc(sizeof(NODETYPE));
			point->len=0;
			p->rp=point;
			p=p->rp;
		}
		
	}
	head=Sort(head,max);
	printf("Numbers in correct order is:\n");
	for(p=head;p!=NULL;p=p->rp)
	{
		for(i=p->len-1;i>=0;i--)
			printf("%d",p->num[i]);
		printf("  ");
	}
}


//getchar()接收scanf的回车\n ??

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -