#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;
}