练习题:
1)在一个单链表head中,若要在指针p所指结点后插入一个q指针所指结点,则执行_____。
A. p->next=q->next; q->next=p;
B. q->next=p->next; p=q;
C. p->next=q->next; p->next=q;
D. q->next=p->next; p->next=q;
2)在一个单链表head中,若要删除指针p所指结点的后继结点,则执行_____。
A. p=p->next;free(p);
B. p->next=p->next->next; free(p);
C. q= p->next ;q->next=p->next; free(q);
D. q=p->next; p->next=q->next ;free(q);
3)若长度为n的线性表(a1, a2,…, a n)采用顺序存储,在第i个位置上插入一个新元素,需要依次向后移动个数据元素。
A n-i
B n-i-1
C n-i+1
D n+i
3)完成下列打印带头单链表的各元素的算法.
typedef struct List
{ int data;
struct List *next;
} Node,*Link;
void printlk(Link head)
{Link p=head->next;
while( (1) )
{ printf(“%d\n”,p->data);
(2) ;
}
4)已知无头单链表A和B表示两个集合,本算法实现A=A-B (集合的补运算)。
typedef struct node {
int data;
struct node *next;}lnode;
void setminus(lnode *&A,lnode *B)
{lnode *p,*q;
p= A ;
p->next=A; A=p;
while (B!=NULL)
{p=A;
while ( B )
if(B->data==p->next->data)
{q=p->next; C ;free(q);}
else D ;
E ;
}
A=A->next;
}
5)下列算法创建n个元素的带头单链表.
typedef struct lnode { int data;
struct lnode *next;
}lnode,*linklist ;
void create(linklist &head, int n)
{linklist p; int i;
head=(linklist)malloc(sizeof(lnode));
A ; head=null
for(i=n;i>0;i--)
{p =(linklist)malloc(sizeof(lnode));
scanf(“%d”,&p->data);
B ;p=p->next
C ;
}
}