#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define FALSE 0;
#define TRUE 1;
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node* next;
}Node;
typedef struct Node* LinkList;
LinkList InitList()
{
LinkList L;
L = (LinkList)malloc(sizeof(Node));
if(L==NULL)
{
printf("申请头结点失败!\n");
return NULL;
}
L->next = NULL;
return L;
}
void CreateListTial(LinkList *L,int n)
{
LinkList p,s;
int i;
srand((unsigned)time(NULL));
*L = (LinkList)malloc(sizeof(Node));
s = *L;
for (i=0;i<n;i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() % 100 + 1;
s->next = p;
s = p;
}
s->next = NULL;
}
void CreateListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand((unsigned)time(NULL));
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for (i=0;i<n;i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() % 100 + 1;
p->next = (*L)->next;
(*L)->next = p;
}
}
Status GetElem(LinkList L,int i,ElemType *e)
{
int j = 1;
LinkList p;
p = L->next;
if (!p || j>i)
{
return FALSE;
}
while (p && j < i)
{
p = p->next;
++j;
}
*e = p->data;
return TRUE;
}
Status ListInsert(LinkList *L,int i,ElemType e)
{
int j = 1;
LinkList p,s;
p = *L;
while (p && j<i)
{
p = p->next;
++j;
}
if(!p || j > i)
return FALSE;
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return TRUE;
}
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j = 1;
LinkList p,s;
p = *L;
while (p->next && j < i)
{
p = p->next;
++j;
}
if(!(p->next) || j>i)
return 0;
s = (LinkList)malloc(sizeof(Node));
s = p->next;
p->next = s->next;
*e = s->data;
free(s);
return TRUE;
}
Status ClearList(LinkList *L)
{
LinkList p,s;
p = *L;
while (p)
{
s = p->next;
free(p);
p = s;
}
(*L)->next = NULL;
return TRUE;
}
void PrintList(LinkList L)
{
LinkList p;
p = L->next;
while (p != NULL)
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
}
int main()
{
ElemType e;
LinkList h = NULL;
h = InitList();
CreateListTial(&h,10);
PrintList(h);
ListInsert(&h,1,19);
ListInsert(&h,2,16);
PrintList(h);
GetElem(h,3,&e);
printf("第三个元素是:%d\n",e);
ListDelete(&h,3,&e);
printf("删除的第三个元素是:%d\n",e);
PrintList(h);
printf("接下来进行整表删除法\n");
ClearList(&h);
PrintList(h);
printf("用头插法建立单链表\n");
CreateListHead(&h,10);
PrintList(h);
return 0;
}