编程实现单向链表建立、删除、插入、输出
#include "stdio.h"#include "stdlib.h"
#include "string.h"
union data
{int x;
char s[10];
}m;
typedef struct node
{
long xh;
char name[10];
int sc;
}DD;
typedef struct snode
{
long xh;
char name[10];
int sc;
struct snode *next;
}NODE,*linklist;//DE *
void input(DD *st,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%ld%s%d",&st[i].xh,st[i].name,&st[i].sc);
}
linklist create(DD st[],int n)
{
linklist h,p,q;
int i;
h=(linklist)malloc(sizeof(NODE));
h->xh=st[0].xh;
strcpy(h->name,st[0].name);
h->sc=st[0].sc;
p=q=h;
for(i=1;i<n;i++)
{
q=p;
p=(linklist)malloc(sizeof(NODE));
p->xh=st[i].xh;
strcpy(p->name,st[i].name);
p->sc=st[i].sc;
q->next=p;
}
p->next=NULL;
return(h);
}
void output(linklist h)
{
linklist p;
p=h;
while(p)
{
printf("%ld %s %d\n",(*p).xh,p->name,p->sc);
p=p->next;
}
}
linklist search(linklist h,char xm[])
{
linklist p=h;
while(p)
{if(strcmp(p->name,xm)==0)
return(p);
p=p->next;
}
return(NULL);
}
void dellink(linklist h,int i)
{
linklist p=h,f;
int j=1;
while(j<i-1)
{
p=p->next;
j++;
}
f=p->next;
p->next=f->next;
free(f);
}
void *insert(NODE *h,int i,NODE *f)
{
NODE *p;
int j;
p=h;
f=(linklist)malloc(sizeof(NODE));
scanf("%ld%s%d",&f->xh,f->name,&f->sc);
j=1;
while(j<i&&p)
{
p=p->next;
j++;
}
if(i==1)
{
h=f;
f->next=p;
}
else
{
f->next=p->next;
p->next=f;
}
return h;
}
main()
{
NODE *a,*f;
linklist h ,p;
DD st[5];
char xm[10];
int n,i;
printf("输入单链表:\n");
input(st,5);
h=create(st,5);
printf("输出单链表:\n");
output(h);
printf("输入查找的名字:\n");
getchar();
gets(xm);
p=search(h,xm);
if(p)
printf("Succ:%ld %s %d\n",(*p).xh,p->name,p->sc);
else
printf("failed:no person:\n");
printf("输入删除的人的位数:\n");
scanf("%d",&n);
dellink(h,n);
printf("deleted:\n");
output(h);
printf("输入插入的学号姓名成绩");
insert(a,2,f);
printf("输出单链表:\n");
output(h);
}