单链表(二)
原创
©著作权归作者所有:来自51CTO博客作者SmilerHome的原创作品,请联系作者获取转载授权,否则将追究法律责任
上篇说了我心中的链表,它很是简单,就是一个简简单单的数据的链接,链表就是数据单元类型的指针。而教科书上的链表就相对复杂了些。如它会为链表单独定义一种类型。这点在开始学习链表的时候总是弄糊涂。下面就看看教科书上是如何定义链表类型的。例子还是上篇的电话簿。
第一步:定义结点类型。
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
typedef
struct LinkMan
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
{
char name[PHB_NAME_LEN];
char num[PHB_NUM_LEN];
struct LinkMan *next;
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}LinkMan,*pLinkMan;
第二步:定义链表类型:
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
typedef
struct PhoneBook
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
{
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
pLinkMan first;
//头指针 ![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
pLinkMan last;
//尾指针
int len;
//链表长度 ![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}PhoneBook,*pPhoneBook;
有的没有尾指针,只有头指针。定义如下:
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
typedef
struct PhoneBook
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
{
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
pLinkMan first;
//头指针
int len;
//链表长度 ![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}PhoneBook,*pPhoneBook;
OK,到目前为止,一个链表类型基本就定义完成了,剩下的就是使用了。虽然这种定义开起来容易使初学者糊涂,但它还是蛮好用的。下面就简单看下它的使用:
phb->len--;
return;
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}
else ![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
{
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
pPrior->next = pTemp->next;
if (pTemp == phb->last)
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
{
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
phb->last = pPrior;
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}
//栈上的空间不能用free进行释放
// free(pTemp);
phb->len--;
return;
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}
else ![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
{
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
pPrior = pTemp;
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
pTemp = pTemp->next;
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
printf(
"Can't find the linkman in phonebook!\n");
![单链表(二)_单向链表](https://s2.51cto.com/images/editer/InBlock.gif)
}