单链表使是一种链式存储结构,链表中的数据以结点的方式表示.每个结点由数据域和指针域两部分构成.数据域存储链表的数据元素,指针域存储连接相邻结点的地址.
2.单链表基本组成typedef struct linklist_t{
int data; // 数据域.
struct linklist_t *next; // 指针域.
}linkList_T;
static linkList_T *pHead; // 头指针.
上述代码中我们定义了 pHead 头指针结点.这个结点并不包含实际的数据域,仅仅是为了我们更加方便的操作链表.
3.单链表基础操作3.1创建单链表
创建单链表的整体思路是依托于pHead头结点,创建结点,并建立结点之间的相互关系.
int creatlist(int n)
{
linkList_T *pTmp = NULL, *pEnd = NULL;
int i = 0;
pHead = (linkList_T*)malloc(sizeof (linkList_T));
if (NULL == pHead)
return -1;
pEnd = pHead;
for (i = 0; i < n; i++){
pTmp = (linkList_T*)malloc(sizeof (linkList_T));
pTmp->data = i;
pEnd->next = pTmp;
pEnd = pTmp;
}
pEnd->next = NULL;
return 0;
}
3.2插入新结点
插入结点的思路是找到要插入的位置,先建立待插入结点与下一个结点的关系,然后再建立待插入结点与 上一个结点的位置关系(即断开插入之前的连接关系).
int insertlist(int n, int num)
{
linkList_T *pTmp = NULL, *pNode = NULL;
int j = 0;
pTmp = pHead;
while (pTmp && (j < n)){
pTmp = pTmp->next;
j++;
}
if (NULL == pTmp)
return -1;
pNode = (linkList_T *)malloc(sizeof (linkList_T));
if (NULL == pNode)
return -1;
pNode->next = pTmp->next;
pNode->data = num;
pTmp->next = pNode;
return 0;
}
3.3删除节点
删除结点的思路是找到待删除的结点,建立待删除结点的前一个结点与待删除结点的后一个结点之间的连接关系.然后删除待删除结点.
int dellist(int n)
{
linkList_T *pTmp = pHead;
linkList_T *pPrv = pHead;
int j = 0;
while(pTmp && (j < n)){
pPrv = pTmp;
pTmp = pTmp->next;
j++;
}
if (NULL == pTmp)
return -1;
pPrv->next = pTmp->next;
pTmp->next = pTmp;
free(pTmp);
return 0;
}
3.4修改链表数据
修改链表指定结点数据的思路是遍历链表找到待修改结点,修改数据域.
int changelist(int n, int num)
{
linkList_T *pTmp = NULL;
int j = 0;
pTmp = pHead;
while(pTmp && (j < n)){
pTmp = pTmp->next;
j++;
}
if (NULL == pTmp)
return -1;
pTmp->data = num;
return 0;
}
3.5查询链表
int querylist(void)
{
linkList_T *pTmp = NULL;
int i = 0;
pTmp = pHead;
while(pTmp->next){
pTmp = pTmp->next;
i++;
printf ("第 %d 结点的值是 %d rn",i, pTmp->data);
}
printf ("rn");
return 0;
}
4.测试程序
int main(int argc, char **argv)
{
creatlist(5);
querylist();
insertlist(5, 8);
querylist();
changelist(2, 6);
querylist();
insertlist(2, 8);
querylist();
dellist(3);
querylist();
}
5测试结果
第 1 结点的值为 0 第 2 结点的值为 1 第 3 结点的值为 2 第 4 结点的值为 3 第 5 结点的值为 4 第 1 结点的值为 0 第 2 结点的值为 1 第 3 结点的值为 2 第 4 结点的值为 3 第 5 结点的值为 4 第 6 结点的值为 8 第 1 结点的值为 0 第 2 结点的值为 6 第 3 结点的值为 2 第 4 结点的值为 3 第 5 结点的值为 4 第 6 结点的值为 8 第 1 结点的值为 0 第 2 结点的值为 6 第 3 结点的值为 8 第 4 结点的值为 2 第 5 结点的值为 3 第 6 结点的值为 4 第 7 结点的值为 8 第 1 结点的值为 0 第 2 结点的值为 6 第 3 结点的值为 2 第 4 结点的值为 3 第 5 结点的值为 4 第 6 结点的值为 8



