代码的方法的参数和第一个的顺序存储的方法参数大同小异,如有疑问,请参考第一个文章
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
//线性表的单链表存储结构
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef Node * LinkList;
//单链表的初始化
Status InitList(LinkList *list)
{
*list = (LinkList)malloc(sizeof(Node));
if(*list == NULL) return ERROR;
(*list) -> next = NULL;
(*list) -> data = NULL;
return OK;
}
//添加元素
Status Add(LinkList *list, ElemType elem, int *index)
{
int i = 0;
LinkList l, p;
if(!list || !elem) return ERROR;
l = *list;
while(true)
{
if(l -> next == NULL)
{
p = (LinkList)malloc(sizeof(Node));
p -> data = elem;
p -> next = l -> next;
l -> next = p;
break;
}
l = l -> next;
i++;
}
*index = i;
return OK;
}
//插入元素
Status Insert(LinkList *list, ElemType elem, int index)
{
int i = 0;
LinkList l, p;
l = *list;
while(l && i < index)
{
l = l -> next;
i++;
}
if(!l || index < 0) return ERROR;
p = (LinkList)malloc(sizeof(Node));
p -> data = elem;
p -> next = l -> next;
l -> next = p;
return OK;
}
//更新元素
Status Update(LinkList *list, ElemType elem, int index)
{
int i = 0;
LinkList l;
l = *list;
while(l && i <= index)
{
l = l -> next;
i++;
}
if(!l || index < 0) return ERROR;
l -> data = elem;
return OK;
}
//删除元素
Status Delete(LinkList *list, ElemType *elem,int index)
{
int i = 0;
LinkList l, p;
l = *list;
while(l && i < index)
{
l = l -> next;
i++;
}
p = l -> next;
if(!p || index < 0) return ERROR;
*elem = p -> data;
l -> next = p -> next;
free(p);
return OK;
}
//根据指定的索引获取元素
Status GetElem(LinkList list, ElemType *elem, int index)
{
int i = 0;
LinkList l;
l = list;
while(l && i <= index)
{
l = l -> next;
i++;
}
if(!l || index < 0) return ERROR;
*elem = l -> data;
return OK;
}
//清空单链表
Status Clear(LinkList *list)
{
LinkList l, p;
l = (*list) -> next;
while(l)
{
p = l -> next;
free(l);
l = p;
}
(*list) -> next = NULL;
return OK;
}
int main(void)
{
LinkList list;
Status statu;
statu = InitList(&list);
if(statu == OK)
{
printf("%s : %p, %d\n", "InitList", list -> next, list -> data);
int index;
statu = Add(&list, 20, &index);
if(statu == OK)
{
printf("%s : %p, %d, %d\n", "Add", list -> next -> next, list -> next -> data, index);
Add(&list, 21, &index);
ElemType getElem;
statu = GetElem(list, &getElem, 1);
if(statu == OK)
{
printf("%s : %d\n", "GetElem", getElem);
statu = Insert(&list, 22, 1);
if(statu == OK)
{
GetElem(list, &getElem, 1);
printf("%s : %d\n", "Insert", getElem);
statu = Update(&list, 31, 1);
if(statu == OK)
{
GetElem(list, &getElem, 1);
printf("%s : %d\n", "Update", getElem);
ElemType delElem;
statu = Delete(&list, &delElem, 1);
if(statu == OK)
{
GetElem(list, &getElem, 1);
printf("%s : %d, %d\n", "Delete", getElem, delElem);
statu = Clear(&list);
if(statu == OK)
{
printf("%s : %p, %d\n", "InitList", list -> next, list -> data);
}
}
}
}
}
}
}
return 0;
}