#include<stdio.h>
#include<stdlib.h>
#define MaxSize 1000

typedef int ElemType;


typedef struct Node
{
	ElemType date;
	struct Node * next;
}linklist;

//头插法创建单链表

void createlistF(linklist *l,int a[],int n)
{
	linklist * s;
	int i;
	l=(linklist*)malloc(sizeof(linklist));
	l->next=NULL;
	for(i=0;i<n;i++)
	{
		s=(linklist*)malloc(sizeof(linklist));
		s->date=a[i];
		s->next=l->next;
		l->next=s;
	}
}

//尾插法创建单链表
 void createlistR(linklist *l,ElemType a[],int n)
 {
	 linklist *s,*r;
	 int i;
	 l=(linklist*)malloc(sizeof(linklist));
	 r=l;
	 for(i=0;i<n;i++)
	 {
		 s=(linklist*)malloc(sizeof(linklist));
		 s->date=a[i];
		 r->next=s;
		 r=s;
	 }
 }

 //初始化线性表
 void initlist(linklist *l)
 {
	 l=(linklist*)malloc(sizeof(linklist));
	 l->next=NULL;
 }

 //销毁线性表
 void destorylist(linklist *l)
 {
	 linklist *pre=l;
	 linklist *p=l->next;
	 while(p!=NULL)
	 {
		 free(pre);
		 pre=p;
		 p=pre->next;
	 }
	 free(pre);
 }

 //求线性表长度
 int listlength(linklist * l)
 {
	 int n=0;
	 linklist * p=l;
	 while(p->next!=NULL)
	 {
		 n++;
		 p=p->next;
	 }
	 return(n);
 }

 //输出线性表
 void displaylist(linklist *l)
 {
	 linklist *p=l->next;
	 while(p!=NULL)
	 {
		 printf("%d",p->date);
		 p=p->next;
	 }
	 printf("\n");
 }

 //求线性表中i位置的数据元素
bool getelem(linklist *l,int i,ElemType e)
{
	int j=0;
	linklist * p=l;
	while(j<i&&p!=NULL)
	{
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else
	{
		e=p->date;
		return true;
	}
}

//按元素值查找数据
int locateelem(linklist * l,ElemType e)
{
	int i=1;
	linklist * p=l->next;
	while(p!=NULL && p->date!=e)
	{
		p=p->next;
		i++;
	}
	if(p==NULL)
	{
		printf("NO NO  NO   NO");
	}
	else
	{
		return(i);
	}
}

bool insertlist(linklist * l,int i,ElemType e)
{
	int j=0;
	linklist *p=l;
	linklist *s;
	while(j<i-1&&p!=NULL)
	{
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else
	{
		s=(linklist*)malloc(sizeof(linklist));
		s->date=e;
		s->next=p->next;
		p->next=s;
		return true;
	}
}

//删除数据元素
bool deletelist(linklist *l,int i,ElemType &e)
{
	int j=0;
	linklist * p=l;
	linklist * q;
	while(j<i&&p!=NULL)
	{
		j++;
		p=p->next;
	}
	if(p==NULL)
	{
		return false;
	}
	else
	{
		q=p->next;
		if(q==NULL)
		{
			return false;
		}
		else
		{
			p->next=q->next;
			free(q);
			return true;
		}
	}
}

int main()
{
	int i;
	ElemType a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
	linklist *l;
	createlistF(l,a[],10);
	displaylist(l);
	return 0;
}