本实验有关链表的基本操作,为下学期数据结构打基础
5825 查找指定结点的前驱,多组输入数据
#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
int data;
struct node *next;
}LNode;
LNode *search(LNode *H,int x)
{
LNode *p,*pre;
p=H->next;pre=H;
while(p!=NULL&&p->data!=x)
{
pre=p;
p=p->next;
count++;
}
return pre;
}
int main()
{
int n;
int x;
while(scanf("%d",&n)!=EOF)
{
LNode *H;
H=(LNode *)malloc(sizeof(LNode));
H->next=NULL;
int i;
LNode *r;
r=H;
for(i=0;i<n;i++)
{
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(s->data));
s->next=r->next;
r->next=s;
r=s;
}
scanf("%d",&x);
LNode *p;
int *w;
p=search(H,x);
if(p->next==NULL)
{
printf("x不存在");
}
else if(count==0)
{
printf("没有前驱");
}
else
{
printf("%d",p->data);
}
}
return 0;
}
5826 查找链表中有多少个值为偶数的结点
#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
int data;
struct node *next;
}LNode;
void *search(LNode *H)
{
LNode *p;
p=H->next;
while(p!=NULL)
{
if((p->data%2)==0)
{
count++;
}
p=p->next;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
LNode *H;
H=(LNode *)malloc(sizeof(LNode));
H->next=NULL;
int i;
for(i=0;i<n;i++)
{
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(s->data));
s->next=H->next;
H->next=s;
}
search(H);
printf("%d\n",count);
count=0;
}
return 0;
}
5827 尾插法建立链表,之后删除其中所有值为x的结点(x有多个)
#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
int data;
struct node *next;
}LNode;
void search(LNode *H,int x)
{
LNode *p,*pre;
p=H->next;pre=H;
while(p!=NULL)
{
if(p->data==x)
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}
}
void output(LNode *H)
{
LNode *p;
p=H->next;
while(p->next!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d",p->data);
}
int main()
{
int n;
int x;
while(scanf("%d",&n)!=EOF)
{
LNode *H;
H=(LNode *)malloc(sizeof(LNode));
H->next=NULL;
int i;
LNode *r;
r=H;
for(i=0;i<n;i++)
{
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(s->data));
s->next=r->next;
r->next=s;
r=s;
}
scanf("%d",&x);
search(H,x);
output(H);
printf("\n");
}
return 0;
}
5828 尾插法建立递增有序的链表,插入一个结点后仍然有序
#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
int data;
struct node *next;
}LNode;
void yxinsert(LNode *H,int x)
{
LNode *p,*pre;
p=H->next;pre=H;
while(p!=NULL&&p->data<x)
{
pre=p;
p=p->next;
}
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=pre->next;
pre->next=s;
}
void output(LNode *H)
{
LNode *p;
p=H->next;
while(p->next!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d",p->data);
}
int main()
{
int n;
int x;
while(scanf("%d",&n)!=EOF)
{
LNode *H;
H=(LNode *)malloc(sizeof(LNode));
H->next=NULL;
int i;
LNode *r;
r=H;
for(i=0;i<n;i++)
{
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(s->data));
s->next=r->next;
r->next=s;
r=s;
}
scanf("%d",&x);
yxinsert(H,x);
output(H);
printf("\n");
}
return 0;
}
5829 建立有序链表(利用上一问的有序插入函数,一个一个插入建立有序链表)
#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
int data;
struct node *next;
}LNode;
void yxinsert(LNode *H,int x)
{
LNode *p,*pre;
p=H->next;pre=H;
while(p!=NULL&&p->data<x)
{
pre=p;
p=p->next;
}
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=pre->next;
pre->next=s;
}
void output(LNode *H)
{
LNode *p;
p=H->next;
while(p->next!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d",p->data);
}
void create(LNode *H,int n)
{
int i;
int in=0;
for(i=0;i<n;i++)
{
scanf("%d",&in);
yxinsert(H,in);
}
}
int main()
{
int n;
int x;
while(scanf("%d",&n)!=EOF)
{
LNode *H;
H=(LNode *)malloc(sizeof(LNode));
H->next=NULL;
create(H,n);
output(H);
printf("\n");
}
return 0;
}