int lenth(LNode * head)
{
LNode *p
int i
p=head
while(p)
{
++i
p=p->next
}
return i
}
2.
int max(LNode * head)
{
LNode *p
LNode *q
elemtype maxelem//具体的数据类型我不知道,所以用了elemtype
p=head
maxelem=p->data
while(p)
{
p=p->next
if(p->data >maxekem)
{
maxelem=p->data
q=p /*将最大的位置记录下来*/
}
p=head
while(p!=q)
{
p=p->next
++i /*找到最大值的位子,并记录是第几个节点*/
}
return i /*在一个函数中只能有一个返回值,最大值你可以打印出来,这里我就不写了*/
}
}
3、
int inset_after(LNode *head,x,y)
{
LNode *p
LNode *q
p=head
while(p &&p->data!=x)
p=p->next
if(!p) return 0//没有找到
q=(LNode *)malloc(sizeof(LNode))
q->data=y
q->next=p->next
p->next=q
return 1//找到
}
4、int merge(LNode *L)
{
LNode *p
LNode *q
int i
q=L
p=create()
p->next=p->next->next//去除头结点
i=5
while(q &&i<0) //如果要插入的带头结点的链表的话,是i<=0
{ q=q->next
i--
}
if(!p) return 0//要插入的链表的结点数小于5,退出,返回0
}
1.
随意画几个二叉树就知道了,这里空链域用ε表示,数一数结点个数与ε个数就知道是n+1了
2.
具体过程在图中给出。
3.
第一步将数据(假设为e)放入s的data中;
第二步s的后继指向q的后继节点;
第三步q的后继指向s
4.
查找72只需2步:
第一步:设立low、high与mid指针,将72与mid指向的值即48比较;
第二部:72比48大,low指向mid+1,重新算出mid,指向72,再与72比较,即查找成功。
最多比较次数参考严蔚敏《数据结构》第九章 查找 220页。
5.
例如图中这棵树,假设i=2,2i=4不大于n,2i+1=5大于n,所以2这个结点没有右子树。
6.
顺序栈的类型定义:
typedef struct{char *base //也可用ElemType,只要定义了就行
char *top
int stacksize
}SqStackTp //注意名字要和主函数里的统一
运行结果:
ABCDEFGHIJKLM
MLKJIHGFEDCBA
结果详解:
在这里将'A'到'A'+12='M'进栈同时输出
for(ch=’A’ch<=’A’+12ch++)
{ Push(&sq,ch)
printf(“%c”,ch)
}
在这里将'A'到'M'出栈同时输出
while(!EmptyStack(sq))
{ Pop(&sq,&ch)
printf(“&c”,ch)
} printf(“\n”)
由于栈是后进先出,所以就有这样的结果
7.
void converse(int n,int d){SqStack S //新建一个栈
InitStack(S) //初始化栈
int k,e
while(n>0){
k=n%d
push(S,k)
n=n/d
}//将余数进栈
while(S.top!=S.base){
pop(S,e)
printf("%1d",e)
}//输出结果
}
8.
先序遍历:ABCDEF
中序遍历:BCDAFE
后序遍历:DCBFEA
3.28void InitCiQueue(CiQueue&Q)//初始化循环链表表示的队列Q
{
Q=(CiLNode*)malloc(sizeof(CiLNode))
Q->next=Q
}//InitCiQueue
voidEnCiQueue(CiQueue&Q,int x)//把元素x插入循环列表表示的队列Q,Q指向队尾元素,Q->next指向头结点,Q->next->next指向队尾元素
{
p=(CiLNode*)malloc(sizeof(CiLNode))
p->data=x
p->next=Q->next//直接把p加在Q的后面
Q->next=p
Q=p//修改尾指针
}
Status DeCiQueue(CiQueue&Q,int x)//从循环链表表示的队列Q头部删除元素x
{
if(Q==Q->next)return INFEASIBLE//队列已空
p=Q->next->next
x=p->data
Q->next->next=p->next
free(p)
rturn OK
}//DeCiqueue
3.31
int Palindrome_Test()
{
InitStack(S)InitQueue(Q)
while((c=getchar())!='@')
{
Push(S,c)EnQueue(Q,c)
}
while(!StackEmpty(S))
{
pop(S,a)DeQueue(Q,b)
if(a!=b)return ERROR
}
return OK
}