/**
*时间:2010年8月28日17:19:49
*功能:C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置
*/
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
/*假设输入的数据为3个--我比较好操作-_-*/
#define size 3
typedef struct List
{
int num;
int shuju;
struct List *next;
}list;
/*头结点*/
list *setup_list(list *head)
{
printf("setup_list\n");
head=malloc(sizeof(list));
if(head==NULL)
{
printf("setup fail\n");
getch();
exit(0);
}
head->num=NULL;
head->shuju=NULL;
head->next=NULL;
printf("setup success\n");
return head;
}
/*输入数据*/
void input(list *head,int num)
{
list *q=NULL;
list *s=NULL;
s=malloc(sizeof(list));
s->next=NULL;
printf("input the %d data:",num);
scanf("%d",&s->shuju);
s->num=num;
q=head;
while(q->next!=NULL)
{
q=q->next;
}
q->next=s;
}
/*浏览*/
void browse(list *head)
{
list *q=NULL;
q=head->next;
while(q!=NULL)
{
printf("num:%d\n",q->num);
printf("shuju:%d\n",q->shuju);
q=q->next;
}
}
/*插入num值有主函数控制*/
void insert_list(list *head,int num)
{
list *q=NULL;
list *p=NULL;
list *s=NULL;
q=head;
p=q->next;
while(p!=NULL&&p->num!=num)
{
q=p;
p=q->next;
}
s=malloc(sizeof(list));
printf("input shuju");
scanf("%d",&s->shuju);
s->num=num;
q->next=s;
s->next=p;
/*整理 num后面的数后推*/
while(p!=NULL)
{
num++;
p->num=num;
p=p->next;
}
}
void delete_list(list *head,int num)
{
list *q=NULL;
list *p=NULL;
q=head;
p=q->next;
while(p!=NULL&&p->num!=num)
{
q=p;
p=q->next;
}
q->next=p->next;
free(p);
printf("num %d\n",num);
p=q->next;
while(p!=NULL)
{
p->num=num;
num++;
p=p->next;
}
}
/*查找元素 并返回位置*/
list *find_list(list *head,int data)
{
list *q=NULL;
list *p=NULL;
q=head;
p=q->next;
while(p!=NULL&&p->shuju!=data)
{
q=p;
p=q->next;
}
printf("num :%d data : %d\n",p->num,p->shuju);
return p;
}
exit_list(list *head)
{
printf("exit ok");
free(head);
getch();
}
main()
{
int middle=0;
int num=0;
int i=0;
list *head=NULL;
list *s=NULL;/*接收指针 case3的指针接收*/
head=setup_list(head);
printf("head->next %d\n",head->next);
printf("head->num %d\n",head->num);
printf("head->shuju %\n",head->shuju);
getch();
for(i=0;i
input(head,num);
num++;
}
browse(head);
*********************************************************
/*1插入 2删除 3查找 4浏览 5退出*/
*********************************************************
for(;;)
{
printf("input middle:");
scanf("%d",&middle);
switch(middle)
{
case 1:
printf("insert \ninput num:");
scanf("%d",&num);
insert_list(head,num);
break;
case 2:
printf("delete \ninput num:");
scanf("%d",&num);
delete_list(head,num);
break;
case 3:
printf("find \ninput data:");
scanf("%d",&num);
s=find_list(head,num); /*数据查找 s已经接收,至于你要做什么,我就不懂了,你自己添加*/
break;
case 4:
browse(head);
break;
case 5:
exit_list(head);
return;
/*输入异常的时候*/
default:
break;
}
}
}
去看看数据结构就知道了,如果你不看是不会明白的!