顺序查找(C语言)

一.不带哨兵:

1. 线性表结构体

typedef struct List
{
	int *data;//元素数组 
	int length;//可以写入多少元素 
	int num;//目前元素个数 
}List;

 2.初始化列表

List *initList(int length)
{/*参数length:有多少元素空位*/
	List *list = (List*)malloc(sizeof(List));//为列表申请空间 
	list->length = length;//元素长度写入 
	list->data = (int*)malloc(sizeof(int)*length);//为列表内的数组申请空间 
	list->num = 0;//初始元素个数为0 
	return list; //返回列表 
}

 3.向列表内写入元素

void listAdd(List *list,int data)
{/*参数一:列表指针 
参数二:要写入的元素*/
	list->data[list->num] = data;//将元素按序写入 
	list->num += 1;//列表内元素数量加一 
}

 4.查找元素

int search(List *list,int key)
{/*参数一:列表指针 
参数二:要查找的元素*/
	int i;
	for(i=0;i<list->num;i++)//循环遍历列表中的每一个元素直到与要查找的元素值相等 
	{
		if(list->data[i]==key)
			return key;
	}
	return -1;//没查到返回-1 
}

5.遍历输出列表内的元素

void printList(List *list)
{/*参数list:列表指针*/
	int i;
	for(i=0;i<list->num;i++)//循环遍历,按序输出列表内data的值 
		printf("%d ",list->data[i]);
	printf("\n");
} 

 6.主函数

int main()
{
	List *list = initList(5);//初始化,列表长度设为5 
	int i,key,n;
	for(i=0;i<5;i++)
		listAdd(list,i);//往列表内写入元素 
	printf("列表内元素:");
	printList(list);//遍历输出列表 
	printf("请输入要查找的元素:");
	scanf("%d",&key);
	n = search(list,key);//查找元素 
	if(n>=0) 
		printf("查找到该元素n:%d\n",n);
	else
		printf("未查找到该元素!\n");
	return 0;
}

 二.带哨兵

 和不带哨兵的区别仅在初始化列表,查找元素,遍历输出列表内的元素,和主函数某几行代码不同.

1. 初始化列表

List *initList(int length)
{/*参数length:有多少元素空位*/
	List *list = (List*)malloc(sizeof(List));//为列表申请空间 
	list->length = length;//元素长度写入 
	list->data = (int*)malloc(sizeof(int)*length);//为列表内的数组申请空间 
	list->num = 1;//初始元素个数为0,加上哨兵num为1 
	return list; //返回列表 
}

 2.查找元素

int search(List *list,int key)
{/*参数一:列表指针 
参数二:要查找的元素*/
	int i;
	list->data[0] = key;//将要查找的元素写入哨兵位置 
	for(i=(list->num)-1;list->data[i]!=key;i--);//从后往前找,找到要查找的元素时就停止循环 
	return i;//返回元素下标 
}

 3.遍历输出列表内的元素

void printList(List *list)
{/*参数list:列表指针*/
	int i;
	for(i=1;i<list->num;i++)//循环遍历,按序输出列表内data的值 
		printf("%d ",list->data[i]);
	printf("\n");
} 

 4.主函数

int main()
{
	List *list = initList(5);//初始化,列表长度设为5 
	int i,key,n;
	for(i=0;i<5;i++)
		listAdd(list,i);//往列表内写入元素 
	printf("列表内元素:");
	printList(list);//遍历输出列表 
	printf("请输入要查找的元素:");
	scanf("%d",&key);
	n = search(list,key);//查找元素 
	if(n!=0)//没有找到第0个位置,说明查找到了 
		printf("查找到该元素n:%d\n",list->data[n]);
	else//查找到哨兵位置说明没有该元素 
		printf("未查找到该元素!\n");
	return 0;
}

三. 完整代码

#include <stdio.h>
#include <stdlib.h>
/*线性表结构体*/
typedef struct List
{
	int *data;//元素数组 
	int length;//可以写入多少元素 
	int num;//目前元素个数 
}List;
/*初始化列表*/
List *initList(int length)
{/*参数length:有多少元素空位*/
	List *list = (List*)malloc(sizeof(List));//为列表申请空间 
	list->length = length;//元素长度写入 
	list->data = (int*)malloc(sizeof(int)*length);//为列表内的数组申请空间 
	list->num = 0;//初始元素个数为0 
	return list; //返回列表 
}
/*向列表内写入元素*/
void listAdd(List *list,int data)
{/*参数一:列表指针 
参数二:要写入的元素*/
	list->data[list->num] = data;//将元素按序写入 
	list->num += 1;//列表内元素数量加一 
}
/*查找元素*/
int search(List *list,int key)
{/*参数一:列表指针 
参数二:要查找的元素*/
	int i;
	for(i=0;i<list->num;i++)//循环遍历列表中的每一个元素直到与要查找的元素值相等 
	{
		if(list->data[i]==key)
			return key;
	}
	return -1;//没查到返回-1 
}
/*遍历输出列表内的元素*/
void printList(List *list)
{/*参数list:列表指针*/
	int i;
	for(i=0;i<list->num;i++)//循环遍历,按序输出列表内data的值 
		printf("%d ",list->data[i]);
	printf("\n");
} 
int main()
{
	List *list = initList(5);//初始化,列表长度设为5 
	int i,key,n;
	for(i=0;i<5;i++)
		listAdd(list,i);//往列表内写入元素 
	printf("列表内元素:");
	printList(list);//遍历输出列表 
	printf("请输入要查找的元素:");
	scanf("%d",&key);
	n = search(list,key);//查找元素 
	if(n>=0) 
		printf("查找到该元素n:%d\n",n);
	else
		printf("未查找到该元素!\n");
	return 0;
}

 四.运行结果

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值