华师大 数据结构 上机实验1及答案

  • 格式:doc
  • 大小:31.50 KB
  • 文档页数:5

在单链表中把值为a的结点插到值为b的结点
的前面,若链表中无b结点,则把值为a的结
点插入到链表最后

#include
#include

typedef struct node {
char data;
struct node *next;
}NODE;
NODE *head;

NODE *CreateLinkedList(int n)
{
int i;
NODE *head,*p,*q;

if(n==0)
return(NULL);

head=(NODE*)malloc(sizeof(NODE));
p=head;
for(i=1;i<=n-1;i++)
{
scanf("%d",&(p->data));
q=(NODE*)malloc(sizeof(NODE));
p->next=q;
p=q;
}
scanf("%d",&(p->data));
p->next=NULL;

return(head);
}

void insert(NODE **head,int a,int b){
NODE *p,*q,*r,*h;
h=*head;
q=(NODE*)malloc(sizeof(NODE));
q->data=a;
q->next=NULL;
p=*head;
if(p==NULL){
*head=q;
return;
}
if(p->data==b){
q->next=p;
*head=q;
}
else{
r=p;
while(p!=NULL){
if(p->data==b) break;
r=p;
p=p->next;
}
r->next=q;
q->next=p;
}

while(h!=NULL)
{
printf("%d",h->data);
h=h->next;
}
return;
}

void main()
{
int n,a,b;
NODE *t,*t1;
printf("请输入结点数:");
scanf("%d",&n);
t=CreateLinkedList(n);
t1=t;
while(t1!=NULL)
{
printf("%d",t1->data);
t1=t1->next;
}

printf("\n请输入a节点的值:");
scanf("%d",&a);
printf("请输入b节点的值:");
scanf("%d",&b);

insert(&t,a,b);
}