华师大 数据结构 上机实验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);
}