#include "stdio.h"
#include "stdlib.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
/*创建一个空链表,返回指向链表的指针*/
linklist *creatList()
{ linklist *head;
head = initList(head);
return head;
}
/*将单链表head置空*/
linklist* initList(linklist *head)
{
head = (linklist*)malloc(sizeof(linklist));
head->next = NULL;
return head;
}
/*创建一个非空链表(按尾插法创建),返回指向链表的指针*/
linklist *creatList1()
{ datatype x; int n;
linklist *head,*rear,*p;
head = initList(head);
rear = head->next;
printf("please input length of list:");
scanf("%d",&n);
printf("please input X to be insert:");
while(n)
{
scanf("%d",&x);
p = (linklist)malloc(sizeof(linklist));
p->data=x;
rear->next=p;
rear = p;
n--;
}
rear->next=NULL;
return head;
}
/*按从前向后的顺序显示链表中的元素值*/
void displaylist(linklist *head)
{
linklist *p;
p = head->next;
printf("\n单链表head的各个元素分别是 : ");
while(p) {
printf("%d -> ",p->data);
p=p->next;
}
printf("\n");
}
void searchByIndex(linklist *head,int index)
{
linklist p* =head->next;
for(int i=0;i<index && p;i++)
p = p->next;
printf("%d",p->data);
}
/*在某个位置上插入一个新结点*/
linklist* Insert(linklist *head,int i, datatype x)
{ linklist *p,*s;
int j;
p=head ;
j=0;
while (p && j<i-1)
{
p=p->next;
j++;
}
if (!p) printf("结点不存在!");
else {
s=(linklist*)malloc(sizeof(linklist)) ;
s->data=x;
s->next=p->next;
p->next=s;
}
return head;
}
/*删除某个位置上的结点*/
linklist * Delete(linklist *head,int i)
{ linklist *p,*q;
//datatype x;
int j;
p=head ; j=0;
while (p && j<i-1)
{
p=p->next;
j++;
}
if (!p||!p->next)
printf("结点不存在!");
else {
q=p->next;
//x=q->data;
p->next=q->next;
free(q);
}
return head;
}
/*判断链表head是否为空,为空返回1,否则返回0*/
int isEmpty(linklist *head)
{
if(head->next) return 0;
else return 1;
}
/*查找第i个位置上的元素结点并返回*/
linklist* locateItem(linklist *head,int Index)
{
linklist *p; int j;
if(Index<=0) {printf("您要找的元素不存在!");return head;}
p=head->next; j=1;
while (p && j<Index)
{
p=p->next;
j++;
}
if (!p) {printf("第i个元素不存在.\n");return NULL; }
else return p;
}
/*删除链表,即删除所有结点*/
void deleteList(linklist *head)
{
linklist *p,*q;
p=head;
while (p)
{
q=p;
p=p->next;
free( q);
}
head = NULL;
}