您的位置:首页 > 其它

编写查找一个单链表特定元素的程序

2015-04-28 22:44 211 查看
\quad\quad我们分成递归和非递归两种方法来实现。

头文件定义如下

#ifndef search_H_
#define search_H_
struct listnode;
typedef struct listnode *List;
typedef struct listnode *Position;
List Insert(int x ,List l);
void Traverse(List l);
List Search_recursion(int x,List l);
List search_iteration(int x,List l);
#endif // search_H_


链表定义和操作以及主函数如下

#include <stdio.h>
#include <stdlib.h>
#include "main.h"
struct listnode
{
int element;
Position next;
};
//Insert
List Insert(int x,List l)
{
Position p_tem;
Position p_insert=malloc(sizeof(struct listnode));
p_insert->element=x;
p_insert->next=NULL;
if(l==NULL)
return p_insert;
else
{
p_tem=l;
while(p_tem->next!=NULL)
p_tem=p_tem->next;
p_tem->next=p_insert;
return l;
}
}
//Traverse
void Traverse(List l)
{
Position p_tem=l;
if(p_tem==NULL)
printf("NULL\n");
while(p_tem!=NULL)
{
printf("%d ",p_tem->element);
p_tem=p_tem->next;
}

}
Position Search_recursion(int x,List l)
{
Position p=l;
if(p==NULL)
return NULL;
if(p->element==x)
return p;
if(p!=NULL&&p->element!=x)
return Search_recursion(x,p->next);//递归的过程,迭代的计算过程
}
Position Search_iteration(int x,List l)
{
Position p_tem=l;
while(p_tem!=NULL)
if(p_tem->element!=x)
p_tem=p_tem->next;
else
return p_tem;
return NULL;
}
int main()
{
int i=0;
List L=NULL;
for(;i<20;i++)
{
L=Insert(i,L);
}
Traverse(L);
printf("%p\n",Search_iteration(3,L));
printf("%p\n",Search_iteration(20,L));
printf("%p\n",Search_recursion(3,L));
printf("%p\n",Search_recursion(20,L));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐