本实验有关链表的基本操作,为下学期数据结构打基础
5825 查找指定结点的前驱,多组输入数据
#include#include 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 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#include 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 data)); s->next=H->next; H->next=s; } search(H); printf("%dn",count); count=0; } return 0; }
5827 尾插法建立链表,之后删除其中所有值为x的结点(x有多个)
#include#include 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 data)); s->next=r->next; r->next=s; r=s; } scanf("%d",&x); search(H,x); output(H); printf("n"); } return 0; }
5828 尾插法建立递增有序的链表,插入一个结点后仍然有序
#include#include 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 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 data)); s->next=r->next; r->next=s; r=s; } scanf("%d",&x); yxinsert(H,x); output(H); printf("n"); } return 0; }
5829 建立有序链表(利用上一问的有序插入函数,一个一个插入建立有序链表)
#include#include 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 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 next=NULL; create(H,n); output(H); printf("n"); } return 0; }



