顺序表的查找

//--------------------------静态查找表的顺序存储结构------------------------------

typedef struct{

    ElemType *elem;        //数据元素存储空间基址,建表时按实际长度分配,0号单元留空

    int length;            //表长度

}SSTable;

int Search_Seq(SSTable ST,KeyType key){
    //在顺序表中ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为
    //该元素在表中的位置,否则为0。
    ST.elem[0].key=key; //“ 哨兵”
    for(i=ST.length;!EQ(ST.elem[i].key,key);--i);   //从后往前找
    return i;   //找不到时,i为0;

}//Search_Seq

下面是在vs 2005中的实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int KeyType;
typedef int Status;
typedef int ElemType;
typedef struct{
	ElemType *elem;
	int length;
}SSTable;
Status Create_Seq(SSTable *st, int n){
	int i=0;
	st->elem=(ElemType *)malloc(sizeof(ElemType)*n);
	if(st->elem==NULL)
		return ERROR;
	st->length=0;
	for(i=1;i<n;i++){
		scanf_s("%d", &st->elem[i]);
		st->length++;
	}//传入的参数虽然为n,但是实际上只能输入n-1个元素,因为第一个元素用来做哨兵了。
	printf("输入成功,长度是%d\n",st->length);
	return OK;
}
Status Destroy_Seq(SSTable *st){
	free(st);
	return OK;
}
int Search_Seq(SSTable ST, KeyType key){
	int i=0;
	ST.elem[0]=key;
	for(i=ST.length; ST.elem[i]!=key; --i);
	return i;
}
Status Traverse_Seq(SSTable ST, Status (*visit)(int i)){
	int i=0;
	for(i=1; i<ST.length+1; i++)
		(*visit)(ST.elem[i]);
	return OK;
}
Status Visit(int i){
	printf("%d", i);
	return OK;
}
int main(int argc, char *argv[]){
	KeyType key; 
	SSTable ST, *st=&ST;
	Status (*func)(int);
	func=Visit;
	printf("请输入9个整数:\n");
	Create_Seq(st, 10);//传入参数为10,实则是能输入9个元素。
	printf("您输入的数据是:\n");
	Traverse_Seq(ST, func);
	printf("\n");
	printf("请输入您想要查找的元素的值:\n");
	scanf("%d", &key);
	printf("查找成功!您查找的元素的索引是%d\n", Search_Seq(ST, key));
	system("pause");
	return 0;
}//其中有些多余的函数虽然实现了,但是没有用上。


实现效果如下图:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值