如果存在空头结点:
p->next
head
->next
如果不存在空头结点:
p->next
head
判断空链表的条件是:
head==head->next;
rear==rear->next;
扩展资料:
用尾指针rear表示的单循环链表对开始结点a1和终端结点an查找时间都是O(1)。而表的操作常常是在表的首尾位置上进行,因此,实用中多采用尾指针表示单循环链表。
在单链表中,从一已知结点出发,只能访问到该结点及其后续结点,无法找到该结点之前的其它结点。而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链表上易于实现。
基本上就是C语言,返回值它直接写了一个Status,程序里的返回值是TRUE和FALSE,如果把STATUS改成BOOL就是标准的C语言了。C语言是C++的一个子集,这个程序也可以认为是C++写的。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