前一小节介绍使用数组实现了线性表,这一小节使用指针来实现:
先看那12个函数:
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode
{
//存放的数据
ElemType data;
//指向下个节点的指针
LNode *next;
}LNode,*LinkList;
//初始化链表
bool initList(LinkList *lst)
{
*lst = (LinkList)malloc(sizeof(LNode));
if(NULL == lst)
return false;
(*lst)->next = NULL;
return true;
}
//删除链表
void deleteList(LinkList *lst)
{
LinkList p = (*lst)->next;
LinkList q;
while(p)
{
q = p->next;
free(p);
p = q;
}
free(*lst);
*lst = NULL;
}
//清空链表
void clearList(LinkList *lst)
{
LinkList p = (*lst)->next;
LinkList q;
while(p)
{
q = p->next;
free(p);
p = q;
}
(*lst)->next = NULL;
}
//判断链表是否为空
bool is_empty(LinkList *lst)
{
if(NULL == (*lst)->next)
{
printf("the list is empty! \n");
return true;
}
else
{
printf("the list is not empty! \n");
return false;
}
}
//遍历链表并打印
void printList(LinkList *lst)
{
printf("list elements are: ");
LinkList p = (*lst)->next;
while(p)
{
printf("%d",p->data);
p = p->next;
}
printf("\n");
}
//计算链表中的元素个数
int listLength(LinkList *lst)
{
int cnt = 0;
LinkList p = (*lst)->next;
while(p)
{
++cnt;
p = p->next;
}
return cnt;
}
//在指定位置插入元素
bool insertElem(LinkList *lst,int index,ElemType *e)
{
int cnt = 0;
LinkList p = (*lst);
LinkList q = (LinkList)malloc(sizeof(LNode));
wh