4.s->next := p->next//把s的尾部接到链表上,连p的下一个
1. P->next :=s//把s的头部接到p的尾部
b.在p结点前插入s结点的语句序列是----------------
7.q := p //临时变量q
11.p := L//从头开始搜素
8.while (p->next != q ) do p := p->next//使p成为原p的前一个节点
4.s->next := p->next//插入,跟上面一样。
1. P->next :=s
c.在表首插入s结点的语句序列是----------------
5.s->next := L//s接原来的表头
12.L := s//将s设为新的表头
d.在表尾插入s结点的语句序列是----------------
11.p := L//从头开始搜素
9.while (p->next !=NIL) do p := p->next//找到最后一个节点
1. P->next :=s//把s接到最后一个节点上
(1)
#include "stdio.h"#include <stdlib.h>
#include "time.h"
#define N 10//假设链表长度为10
struct node{//链表结点结构
int x
struct node *next
}
int mymax(struct node *p){//返回链表最大值函数
int max
for(max=(p=p->next)->xpp=p->next)
if(max<p->x)
max=p->x
return max
}
int main(int argc,char *argv[]){
int i,k
struct node *p,*head,*q
srand((unsigned)time(NULL))//初始化伪随机发生器
for(k=i=0i<=Ni++){
if((q=(struct node *)malloc(sizeof(struct node)))==NULL){//创建新结点
printf("Application memory failure...\n")
return 0
}
if(i){//为新结点自动赋值
q->x=rand()%100
printf(++k%10 ? "%3d" : "%3d\n",q->x)
p->next=q//将新结点接在链表最后
p=p->next
}
else
p=head=q//构造头结点不赋值
}
p->next=NULL//链表结束
printf("\nThe MAX is %d\n",mymax(head))//输出链表中最大值
for(p=headpq=p,p=p->next,free(q))//释放链表
return 0
}
运行样例:
(2)