C bool ListEmpty(LinkNode *L) { return(L->next==NULL); }
2.5.4 求线性表的长度ListLength(L)
1 2 3 4 5 6 7 8 9 10 11
C int ListLength(LinkNode *L) { int n=0; LinkNode *p=L; //p指向头结点,n置为0(即头结点的序号为0) while (p->next!=NULL) { n++; p=p->next; } return(n); //循环结束,p指向尾结点,其序号n为结点个数 }
2.5.5 输出线性表DispList(L)
1 2 3 4 5 6 7 8 9 10
C void DispList(LinkNode *L) { LinkNode *p=L->next; //p指向开始结点 while (p!=NULL) //p不为NULL,输出p结点的data域 { printf("%d ",p->data); p=p->next; //p移向下一个结点 } printf("\n"); }
2.5.6 求线性表L中位置i的数据元素GetElem(L,i,&e)
在单链表L中从头开始找到第i个结点,若存在第i个数据结点,则将其data域值赋给变量e。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
C bool GetElem(LinkNode *L,int i,ElemType &e) { int j=0; LinkNode *p=L; //p指向头结点,j置为0(即头结点的序号为0) //从这里开始表示的为第 i 个结点 while (j<i && p!=NULL) { j++; p=p->next; } //回到判断 if (p==NULL) //不存在第i个数据结点,返回false return false; else //存在第i个数据结点,返回true { e=p->data; return true; } }
2.5.7 按元素值查找LocateElem(L,e)
在单链表L中从头开始找第一个值域与e相等的结点,若存在这样的结点,则返回位置,否则返回0。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
C int LocateElem(LinkNode *L,ElemType e) { int i=1; LinkNode *p=L->next; //p指向开始结点,i置为1
while (p!=NULL && p->data!=e) { p=p->next; //查找data值为e的结点,其序号为i i++; } if (p==NULL) //不存在元素值为e的结点,返回0 return(0); else //存在元素值为e的结点,返回其逻辑序号i return(i); }