1. 程式人生 > 實用技巧 >資料結構C語言實現----順序查詢

資料結構C語言實現----順序查詢

建立上圖的一個txt檔案:

1004 TOM 100
1002 lily 95
1001 ann 93
1003 lucy 98

用一個c程式讀入這個表一個結構體陣列中:

結構體如下:

//學生資料結構體
typedef struct student
{
    int id;        //學號
    char name[10];      //姓名
    int score;      //成績
} Student;

  

以學號為關鍵字,查詢學生成績

執行示例:

程式碼如下:

/*********************************
 * 順序查詢
 * 從檔案讀取一組資料
 * 存入到結構體中
 * 對比key查詢
 * *******************************/
#include<stdio.h>
#include<stdlib.h>
//學生資料結構體
typedef struct student
{
    int id;        //學號
    char name[10];      //姓名
    int score;      //成績
} Student;
//函式宣告
int sq_search(Student r[] , int n , int key);//順序查詢



int main(int argc , char *argv[])
{
    Student r[4];
    FILE *fp;
    //判斷命令列是否正確輸入
    if (argc!=2)
    {
        printf("命令列輸入錯誤!");
        return 0;
    }
    //判斷檔案是否成功開啟
    if ((fp = fopen(argv[1] , "r")) == NULL)
    {
        printf("檔案開啟失敗!");
        return 0;
    }
    //從檔案中讀取資料資訊
    for (size_t i = 0; i < 4; i++)
    {
        fscanf(fp , "%d %s %d",&(r[i].id),&(r[i].name),&(r[i].score));
    }
    //順序查詢
    int key,i;
    while (1)
    {
        printf("請輸入要查詢的學生的學號:");
        scanf("%d",&key);
        i = sq_search(r,4,key);
        if (i!=-1)
        {
            printf("學號:%d\n姓名:%s\n成績:%d\n",r[i].id,r[i].name,r[i].score);
        }else
        {
            printf("列表中沒有該學生的資訊!");
        }
    }
    
    return 0;
}
//順序查詢
int sq_search(Student r[] , int count , int key)
{
    for (size_t i = 0; i < count; i++)
    {
        if (r[i].id==key)
        {
            return i;
        }
    }
    return -1;
}