用C语言写的,C只是我的入门语言,没怎么深学。写的这个我感觉烦琐的要命,不要笑我啊:(
#include<malloc.h>
#include<stdio.h>
int N=0;
typedef struct node{
int x;
struct node *next;
}member;
struct node *Creat() //创建单链表
{
struct node *h,*s,*p;
int i;
if((h=(member *)malloc(sizeof(member)))==NULL)
{
printf("不能分配内存空间");
exit(0);
}
h->x=0;
h->next=NULL;
p=h;
for(i=1;i<10;i++)
{
N++;
if((s=(member *)malloc(sizeof(member)))==NULL)
{
printf("不能分配内存空间");
exit(0);
}
p->next=s;
s->x=i;
s->next=NULL;
p=s;
}
return(h);
}
view(struct node *head) //读取链表的内容
{
struct node *p;
p=head;
while(p->next!=NULL)
{
printf("%d/t",p->x);
p=p->next;
}
printf("%d/n",p->x);
}
insert(struct node *head,int num) //插入节点
{
int t=1;
struct node *p1,*p2;
p1=head;
while(t<num-1)
{
p1=p1->next;
t++;
}
p2=(member *)malloc(sizeof(struct node));
printf("请输入插入节点的数域(int型)");
scanf("%d",&p2->x);
p2->next=p1->next;
p1->next=p2;
N++;
}
del(struct node *head,int num) //删除所选节点
{
int t=1;
struct node *p1,*p2;
p1=head;
while(t<num-1)
{
p1=p1->next;
t++;
}
p2=p1->next->next;
free(p1->next);
p1->next=p2;
N--;
}
int select(struct node *head,int b) //查找元素数据域
{
int y;
struct node *p1;
for(p1=head;p1->next!=NULL;p1=p1->next)
{
if((p1->x)==b)
{
return(0);
}
}
if((p1->x)==b)
{
return(0);
}
}
void main()
{
int a,num;
member *head;
head=Creat();
go:
printf("含有%d个元素的单链表已经创建完毕./n请选择:1.查看链表各数据域 2.插入节点 3.删除指定节点 4.查询数据域 5.退出/t",N+1);
scanf("%d",&a);
switch(a)
{
case 1:
view(head);
goto go;
break;
case 2:
printf("要再第几个节点出插入新节点?");
scanf("%d",&num);
if(num>N+1||num<1)
{
printf("请在1到%d中选择/n",N+1);
goto go;
}
insert(head,num);
goto go;
break;
case 3:
printf("要删除第几个节点?");
scanf("%d",&num);
if(num>N+1||num<1)
{
printf("请在1到%d中选择/n",N+1);
goto go;
}
del(head,num);
goto go;
break;
case 4:
printf("输入查询的关键字(int型)?");
scanf("%d",&num);
if(select(head,num)==0)
{
printf("OK/n");
}
else
{
printf("ERROR/n");
}
goto go;
case 5:
break;
default:
printf("请正确选择");
goto go;
}
}