Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

头次碰到超内存。贴个代码,用链表做的。各位大牛有什么方法能改进吗

Posted by BGW991111 at 2010-03-19 15:10:48 on Problem 1012
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
	int date;
	struct node *next;
}link;

link *Jian(int n);   //建立链表并返回头结点,头结点也包含数据
link *End(link *head,int n);    //寻找尾结点,方便查找
int main(void)
{
	int n,k,j,m,z,q;
	link *head,*end;
	while(scanf("%d",&n)&&n!=0)
	{
		j=k=2*n;
		z=m=n+1;
		head=Jian(2*n);
		end=End(head,n);
		while(k!=n)
		{
			while(--m)
			{
				end=end->next;
				head=head->next;
			}
			m=z;
			head=head->next;
			q=end->next->date;   //数据从1到n  
			free(end->next);     //释放结点
			end->next=head;
			if(q<=n&&q>=1)
			{
				if(!m%n)      //跳过前n个数据开始找
				{
					m=m+n;
					z=m;
				}
				z=++m;
				k=j;
				head=Jian(2*n);
				end=End(head,n);
			}
			else
			{
				k--;
			}
		}
		printf("%d\n",m);
	}
	return 0;
}


link *Jian(int n)
{ 
	int i=0;
	link *head,*p1,*p2;
	p1=head=(link *)malloc(sizeof(link));
	while(--n)
	{
		p1->date=++i;
		p2=(link *)malloc(sizeof(link));
		p1->next=p2;
		p1=p2;
	}
	p1->date=++i;
	p1->next=head;
	return head;
}
link *End(link *head,int n)
{
	link *end=(link *)malloc(sizeof(link));
	int j=1;
	while(j<2*n)
	{
		head=head->next;
		j++;
	}
	end=head;
	return end;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator