C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置

如题所述

第1个回答  2010-08-28
/**
*时间: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<size;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;
}

}

}本回答被提问者采纳
第2个回答  2010-08-28
去看看数据结构就知道了,如果你不看是不会明白的!

C语言实现单链表的建立、输入、插入、删除、查找元素并返回位置
功能: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...

编写算法将单链表的创建,删除和插入用C语言实现
这两种建立链表所要做的首要工作是申请一个头结点,并且将头结点置空(NULL);插入:代码如下:int Insert_LinkList(LinkList H,int i,ElemType x)\/*在链表H中第i个位置插入一个为X的元素*\/ { LNode p,*s;p=Get_LinkList(H,i-1);if (p==NULL){ printf("插入位置 i 出错");return ...

c语言 链表操作:建立,显示及节点的插入,删除
\/\/ 逆位序输入(随机产生)n个元素的值,建立带表头结点的单链线性表L LinkList p;int i;L = (LinkList)malloc(sizeof(LNode));L->next = NULL; \/\/ 先建立一个带头结点的单链表 for (i=n; i>0; --i){ p = (LinkList)malloc(sizeof(LNode)); \/\/ 生成新结点 p->data =...

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
bool InsertList(LinkList la,int i,int e){ \/\/在la链表中的i位置插入数值e int j=1;

c数据结构 实现单链表的创建、插入、删除、打印和查询
cout<<"输入有误"<<endl;else { s=p->next;p->next=s->next;free(s);} return l;} link * add(link *l ){ link *p,*s;cout<<"请输入一串单字符数据,以*结束!"<<endl;char ch;link *HEAD;link *R,*P,*L;HEAD=(link *)malloc(sizeof(link));HEAD->next=NULL;R=HEAD;g...

...实现单链表上的插入,删除计数,查找,修改,输出等操作,
\/* 操作结果:用e返回L中第i个数据元素的值 *\/ Status GetElem(LinkList L,int i,ElemType *e){ int j;LinkList p; \/* 声明一结点p *\/ p = L->next; \/* 让p指向链表L的第一个结点 *\/ j = 1; \/* j为计数器 *\/ while (p && jnext; \/* 让p指向下一个结点 *\/ ...

c语言数据结构单链表的初始化 插入 销毁 元素的取出 删除 操作 求详细C...
\/\/链表建立 Node* creat(){ Node *head = NULL, *p = NULL, *s = NULL;int Date = 0, cycle = 1;head = (Node*)malloc(sizeof(Node));if(NULL == head){ printf("分配内存失败\\r\\n");return NULL;} head->pstnext = NULL;p = head;while(cycle){ printf("请输入数据且当...

如何用C语言创建一个链表,实现增、删、改、查?
while(xh>0) \/\/从键盘临时输入学生情况,当输入的学号非正,则链表建立完毕 { p=(NODE *)malloc(sizeof(NODE));p->st.num=xh;printf("请输入第%d个学生的姓名:",i);scanf("%s",p->st.name);printf("请输入第%d个学生的成绩:",i);scanf("%f",&p->st.score);p->next=NULL;tai...

...内容是建立一个链表,还有链表的插入与删除。
int listdelete(linklist &l,int i)\/\/在带头节点的单链表中删除第i个元素e,并返回其值 { int j=0;linklist p;p=new lnode;p=l;while(p->next&&jnext;++j;} if(!(p->next)||j>i-1){return 0;} linklist q;q=new lnode;q=p->next;p->next=q->next;m=q->data;free(q...

求用c语言初始化一个单链表,然后插入删除的源代码
PNODE create_list(void); \/\/创建链表 void traverse_list(PNODE); \/\/遍历链表 bool is_empty(PNODE); \/\/链表是否为空 int list_len(PNODE);\/\/求链表长度 bool insert_list(PNODE,int , int ); \/\/插入链表结点 bool del_list(PNODE, int, int *);\/\/删除链表结点 void sort_...

相似回答
大家正在搜