__You__You__ 2021-10-19 13:22 采纳率: 100%
浏览 28
已结题

出现好多屯要怎么解决啊

img


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//顺序表大小
#define MAXSIZE 5

//顺序表结点结构体 
typedef struct {
    char Name[40];
    char Author[40];
    char Source[40];
    int Prize;
}BookNode;

//顺序表结构体 
typedef struct {
    BookNode* ListPointer;
    int Length;
}Book;

//定义顺序表初始化函数
Book* initList(Book* L) {
    //为顺序表分配内存空间
    L = (Book*)malloc(sizeof(Book));
    L->ListPointer = (BookNode*)malloc(MAXSIZE * sizeof(BookNode));
    //分配内存失败返回-1作为标记 
    if (L->ListPointer == NULL)
        return NULL;
    //分配成功,初始化顺序表当前已存储数据个数,并返回1作为标记 
    else {
        L->Length = 0;
    }
    return L;
}


//定义向顺序表录入数据函数,Num为要录入的数据数量 
int inputData(Book* L, int Num) {
    printf("#########################\n");
    printf("    向顺序表录入数据\n");
    printf("#########################\n");
    //循环录入Num个学生的信息 
    for (int i = 0; i < Num; i++) {
        //判断存储区是否满 
        if (L->Length >= MAXSIZE) {
            printf("存储区满\n");
            //返回-1标记缓冲区满,没有完成所有数据录入 
            return -1;
        }

        printf("请录入第%d本图书的书名:", L->Length + 1);
        scanf("%c%[^\n]", &L->ListPointer[L->Length].Name);
        printf("请录入第%d本图书的作者:", L->Length + 1);
        scanf("%c%[^\n]", &L->ListPointer[L->Length].Author);
        printf("请录入第%d本图书的出版社:", L->Length + 1);
        scanf("%c%[^\n]", &L->ListPointer[L->Length].Source);
        printf("请录入第%d本图书的价格:", L->Length + 1);
        scanf("%d", &L->ListPointer[L->Length].Prize);

        L->Length++;
    }
    return 1;
}

//打印顺序表所有数据 
void dispList(Book* L) {
    printf("\n#########################\n");
    printf("   打印顺序表所有数据\n");
    printf("#########################\n");
    //根据顺序表记录的数据数量依次打印所有数据 
    for (int i = 0; i < L->Length; i++) {
        printf("第%d本书的书名:%s\n", i + 1, L->ListPointer[i].Name);
        printf("第%d本书的作者:%s\n", i + 1, L->ListPointer[i].Author);
        printf("第%d本书的出版社:%s\n", i + 1, L->ListPointer[i].Source);
        printf("第%d本书的价格:%d\n", i + 1, L->ListPointer[i].Prize);
    }
}

//查找函数
int LocateElem(Book* L, char name)
{
    printf("\n#########################\n");
    printf("查找书名为%s的图书\n", name);
    printf("###########################\n");
    //遍历顺序表找学生 
    for (int i = 0; i < L->Length; i++) {
        if (L->ListPointer[i].Name[40] == name) {
            printf("查找到书名为 %s的图书,序号为%d\n", name, i + 1);
            return i + 1;
        }
        printf("未找到书名为%s的图书\n", name);
    }
    //没找到该学生 
    printf("未找到书名为%s的图书\n", name);
    return -1;
}

//删除函数 
int ListDelete(Book* L, int p, int t) {
    printf("\n#########################\n");
    printf("    删除第%d个图书数据\n", p);
    printf("#########################\n");

    if (p < 0 || p > L->Length) {
        printf("删除第一个位置非法\n");
        return -1;
    }

    for (int i = p; i <= L->Length; i++)
    {
        L->ListPointer[i - 1] = L->ListPointer[i];
    }
    L->Length--;
    printf("删除第一个成功\n");

    if (t< 0 || t > L->Length) {
        printf("删除第二个位置非法\n");
        return -1;
    }

    for (int n = p; n <= L->Length; n++)
    {
        L->ListPointer[n - 1] = L->ListPointer[n];
    }
    L->Length--;
    printf("删除第二个成功\n");

    return 1;
}

//插入函数
int listInsert(Book* L, int p, BookNode* SN)
{
    printf("#   #   #   #   #   #   #\n");
    printf("在第%d个图书后插入数据\n", p);
    printf("#   #   #   #   #   #   #\n");
    if (p<0 || p>L->Length)
    {
        printf("插入位置非法\n");
        return -1;
    }
    for (int i = L->Length; i > p; i--) {
        L->ListPointer[i] = L->ListPointer[i - 1];
    }
    strcpy(L->ListPointer[p].Name, SN->Name);
    strcpy(L->ListPointer[p].Author, SN->Author);
    strcpy(L->ListPointer[p].Source, SN->Source);
    L->ListPointer[p].Prize = SN->Prize;
    L->Length++;
    printf("插入成功\n");
    return 1;
}

int main(int argc, char* argv[]) {
    //定义学生顺序表指针 
    Book* Bookptr = NULL;
    //初始化学生顺序表 
    Bookptr = initList(Bookptr);

    //向学生顺序表录入5组数据
    inputData(Bookptr, 5);

    //打印顺序表所有数据
    dispList(Bookptr);

    //找ID为1003的学生,并输出姓名和位置
    LocateElem(Bookptr, '书3');

    //删除第1,3个学生信息
    ListDelete(Bookptr, 1, 3);

    //在第2,4个学生后插入新学生信息
    BookNode* BookNode2 = (BookNode*)malloc(sizeof(BookNode));
    BookNode2 = NULL;
    strcpy(BookNode2->Name, "书1");
    strcpy(BookNode2->Author, "张");
    strcpy(BookNode2->Source, "出版社1");
    BookNode2->Prize = 65;
    listInsert(Bookptr, 2, BookNode2);
    //打印顺序表所有数据
    dispList(Bookptr);

    BookNode* BookNode3 = (BookNode*)malloc(sizeof(BookNode));
    BookNode3 = NULL;
    strcpy(BookNode3->Name, "书2");
    strcpy(BookNode3->Author, "李");
    strcpy(BookNode3->Source, "出版社2");
    BookNode3->Prize = 65;
    listInsert(Bookptr, 4, BookNode3);
    //打印顺序表所有数据
    dispList(Bookptr);

    free(Bookptr);
    return 0;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月27日
    • 创建了问题 10月19日

    悬赏问题

    • ¥15 模电中二极管,三极管和电容的应用
    • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
    • ¥15 气象网格数据与卫星轨道数据如何匹配
    • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
    • ¥15 微软账户问题不小心注销了好像
    • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
    • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
    • ¥20 关于web前端如何播放二次加密m3u8视频的问题
    • ¥15 使用百度地图api 位置函数报错?
    • ¥15 metamask如何添加TRON自定义网络