*********************************************************************/
/* 以下是关于线性表
链接存储(单链表)操作的16种算法 */
/************************************************************************/
struct sNode{ /* 定义单链表结点类型 */
elemType data;
struct sNode *next;
};
/* 1.初始化线性表,即置单链表的表头指针为空 */
void initList(struct sNode* *hl)
{
*hl = NULL;
return;
}
/* 2.清除线性表L中的所有元素,即释放单链表L中所有的结点,使之成为一个空表 */
void clearList(struct sNode* *hl)
{
/* cp和np分别作为指向两个相邻结点的指针 */
struct sNode *cp, *np;
cp = *hl;
/* 遍历单链表,依次释放每个结点 */
while(cp != NULL){
np = cp- >next; /* 保存下一个结点的指针 */
free(cp);
cp = np;
}
*hl = NULL; /* 置单链表的表头指针为空 */
return;
}
/* 3.返回单链表的长度 */
int sizeList(struct sNode *hl)
{
int count = 0; /* 用于统计结点的个数 */
while(hl != NULL){
count++;
hl = hl- >next;
}
return count;
}
/* 4.检查单链表是否为空,若为空则返回1,否则返回0 */
int emptyList(struct sNode *hl)
{
if(hl == NULL){
return 1;
}else{
return 0;
}
}
/* 5.返回单链表中第pos个结点中的元素,若pos超出范围,则停止
程序运行 */
elemType getElem(struct sNode *hl, int pos)
{
int i = 0; /* 统计已遍历的结点个数 */
if(pos < 1){
printf( "pos值非法,退出运行! ");
exit(1);
}
while(hl != NULL){
&nb