数据结构的求长操作

来源:互联网 发布:乐乎记录生活 编辑:程序博客网 时间:2024/05/16 11:47
1.顺序表的求长:
int ListLength(SqList *L)//求线性表的长度{return(L -> length);}

2.单链表的求长:
int ListLength(LinkList *L)//求线性表的长度{LinkList *p = L;int i = 0;while (p -> next != NULL){i++;p = p -> next;}return(i);}

3.双链表的求长:
int ListLength(DLinkList *L)//求线性表的长度{DLinkList *p = L; int i = 0;while (p -> next != NULL){i++;p = p -> next;}return(i);}


4.循环单链表的求长:
int ListLength(LinkList *L)//求表长{LinkList *p = L;int i = 0;while (p -> next != L){i++;p = p -> next;}return(i);}


5.循环双链表的求长:
int ListLength(DLinkList *L)//求线性表的长度{DLinkList *p = L;int i = 0;while (p -> next != L){i++;p = p -> next;}return(i);}


6.顺序串的求长:
int StrLength(SqString s){return s.length;}


10.链串的求长:
int StrLength(LiString *s){int i = 0;LiString *p=s->next;while (p != NULL) {i++;p = p -> next;}return i;}


7.二叉树的求深度:

int BTNodeDepth(BTNode *b)//求二叉树b的深度{   int lchilddep,rchilddep;   if (b == NULL) return(0); //空树的高度为0   else  {lchilddep = BTNodeDepth(b -> lchild);//求左子树的高度为lchilddep  rchilddep = BTNodeDepth(b -> rchild);//求右子树的高度为rchilddepreturn (lchilddep > rchilddep)? (lchilddep+1):(rchilddep+1);   }}

8.二叉树的求宽度:

int BTWidth(BTNode *b)  //求二叉树b的宽度{struct {int lno;//节点的层次编号BTNode *p;//节点指针} Qu[MaxSize];//定义顺序非循环队列int front, rear;//定义队首和队尾指针int lnum, max, i, n;front = rear = 0;//置队列为空队    if (b != NULL) {rear++;Qu[rear].p = b;//根节点指针入队Qu[rear].lno = 1;//根节点的层次编号为1while (rear != front)//队列不为空{front++;b = Qu[front].p;//队头出队lnum = Qu[front].lno;if (b -> lchild != NULL)//左孩子入队{rear++;Qu[rear].p = b -> lchild;Qu[rear].lno = lnum + 1;}if (b -> rchild != NULL)//右孩子入队{rear++;Qu[rear].p=b->rchild;Qu[rear].lno=lnum+1;}}max=0;lnum = 1; i = 1;while (i <= rear){n=0;while (i <= rear && Qu[i].lno == lnum) {n++; i++;}lnum = Qu[i].lno;if (n > max) max = n;}return max;}elsereturn 0;}


9.求二叉树的结点数:
int Nodes(BTNode *b)//求二叉树b的节点个数{int num1, num2;    if (b == NULL) return 0;    else if (b -> lchild == NULL &&  b  ->  rchild  ==  NULL) return 1;    else    {        num1  =  Nodes(b  ->  lchild);        num2  =  Nodes(b  ->  rchild);        return (num1 + num2 + 1);}}


10.求二叉树的叶子结点数:

int LeafNodes(BTNode *b)//求二叉树b的叶子节点个数{int num1, num2;    if (b == NULL) return 0;    else if (b -> lchild == NULL && b -> rchild == NULL) return 1;    else    {        num1 = LeafNodes(b -> lchild);        num2 = LeafNodes(b -> rchild);        return (num1 + num2);}}

原创粉丝点击