| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 423 人关注过本帖
标题:顺序表的查找
只看楼主 加入收藏
wobuzhidao0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-3-20
结帖率:100%
收藏
 问题点数:0 回复次数:0 
顺序表的查找
#include "stdio.h"
#include "stdlib.h"
#define N 5
#define EQ(a,b)    ((a) == (b))
#define LT(a,b) ((a) <  (b))
#define LQ(a,b) ((a) <= (b))
typedef int      KeyType;
struct ElemType // 数据元素类型(以教科书图9.1高考成绩为例)
 {
   long number; // 准考证号
   char name[9]; // 姓名(4个汉字加1个串结束标志)
   int politics; // 政治
   int Chinese; // 语文
   int English; // 英语
   int math; // 数学
   int physics; // 物理
   int chemistry; // 化学
   int biology; // 生物
   KeyType key; // 关键字类型应为KeyType,域名应为key,与bo9-1.cpp中一致
 }r[N]={{1234,"何芳芳",85,89,98,100,93,80,47},
        {1793,"陈红",85,86,88,100,92,90,45},
        {1753,"陆华",78,75,90,80,95,88,37},
        {1793,"张平",82,80,78,98,84,96,40},
        {1728,"赵小怡",76,85,94,57,77,69,44}}; // 全局变量
 #define total key // 定义总分(total)为关键字

typedef struct
{
    ElemType    *elem;
    int            length;
}SSTable;

//顺序查找P216
int Search(SSTable ST,KeyType key)
{
    int i;
    ST.elem[0].key = key;
    for (i = ST.length;!EQ(ST.elem[i].key,key);--i);
    return i;
}
//构造一个含n个数据元素的静态查找表ST
int Create(SSTable *ST,int n)
{
    int i;
    if(!((*ST).elem = (ElemType*)malloc(sizeof(ElemType)*(n)))) exit(-1);
    for(i = 0;i<n;++i)
    {
        (*ST).elem[i].key = i;
    }
    (*ST).length = n;
   
    return 0;
}

//销毁表ST
void Destroy(SSTable *ST)
{
    free((*ST).elem);
    (*ST).length = 0;
}
void Traverse(SSTable ST,void (*Visit)(ElemType))
{
    ElemType *p;
    int i;
    p=++ST.elem;
    for(i=1;i<=ST.length;i++)
        Visit(*p++);
}
void print(ElemType c) // Traverse()调用的函数
 {
   printf("%-8ld%-8s%4d%5d%5d%5d%5d%5d%5d%5d\n",c.number,c.name,c.politics,c.Chinese,c.English,c.math,c.physics,c.chemistry,c.biology,c.total);
 }
void main()
{
    SSTable ST;
   int i,s;
   for(i=0;i<N;i++) // 计算总分
     r[i].total=r[i].politics+r[i].Chinese+r[i].English+r[i].math+r[i].physics+r[i].chemistry+r[i].biology;
   Create(&ST,N); // 由全局数组产生静态查找表st
   printf("准考证号  姓名  政治 语文 外语 数学 物理 化学 生物 总分\n");
   Traverse(ST,print); // 按顺序输出静态查找表st
   printf("请输入待查找人的总分: ");
   scanf("%d",&s);
   i=Search(ST,s); // 顺序查找
   if(i)
     print(*(ST.elem+i));
   else
     printf("没找到\n");
   Destroy(&ST);

}
请教这哪错了,运行后乱码
搜索更多相关主题的帖子: politics 关键字 高考成绩 English Chinese 
2012-05-10 11:18
快速回复:顺序表的查找
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016276 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved