数据结构C——动态分配—离散存储(非循环单链表)2

数据结构C——动态分配—离散存储(非循环单链表)2,第1张

数据结构//C——动态分配—离散存储(非循环单链表)2
# include 
# include 
# include 
# include 
//  # include   strcpy(q->name, "张三")

typedef struct Student{
    char name[100];
    int id;
    struct Student * pNext;
}Stu;

Stu * Creat_list();
void Show_list(Stu *);
bool bool_empty_list(Stu *);
int length_list(Stu *);
bool insert_list(Stu *, int);
bool delete_list(Stu *, int);
bool deleteID_list(Stu *, int);//                         根据 学号 删除信息写不出来
void sort_list(Stu *);

int main (void){

    Stu * pHead;
    pHead = Creat_list();
    Show_list(pHead);

//    insert_list(pHead,0);
//    delete_list(pHead,1);
//    deleteID_list(pHead, 1);

    printf("学生人数:%d位n", length_list(pHead));
//    sort_list(pHead);
    Show_list(pHead);

    return 0;
}
Stu * Creat_list(){
    Stu *pList;
    Stu * pHead = (Stu *) malloc(sizeof(Stu));

    int len;
    printf("请输入学生人数:");
    scanf("%d", &len);
    if(pHead->pNext == NULL || len == 0){
        printf("录入失败!n");
        exit(-1);
    }
    pHead->pNext = NULL;
    pList = pHead;

    for (int i = 0; i < len; ++i){
        Stu * pNew = (Stu *) malloc(sizeof(Stu));

        printf("第%d名学生信息:n", i+1);
        printf("姓名:");
        scanf("%s", pNew->name);
        printf("学号:");
        scanf("%d",&(pNew->id));

        pList->pNext = pNew;
        pNew->pNext = NULL;
        pList = pNew;
    }
    return pHead;
}
void Show_list(Stu * pHead){
    Stu * q = pHead->pNext;
    if(q != NULL){
        printf("学生信息如下:n");
    } else{
        printf("无信息!");
    }
    while (q != NULL){
        printf("姓名:%s  学号:%dn", q->name, q->id);
        q = q->pNext;
    }

}
bool bool_empty_list(Stu * pHead){
    if(pHead->pNext == NULL){
        printf("无信息,无法遍历!");
        return true;
    } else{
        return false;
    }
}
int length_list(Stu * pHead){
    int length = 0;
    Stu * q = pHead->pNext;
    while (q != NULL){
        length++;
        q = q->pNext;
    }
    return length;
}
bool insert_list(Stu * pHead, int pos){
    Stu * pNew = (Stu *) malloc(sizeof(Stu));

    int i = 0;
    Stu * q = pHead;
//                 while执行几次     q = pHead              插入位置
//  pos= 1,i= 0         0           q = pHead               0——1         pHead 后面
//  pos= 2,i= 0,1       1           q = pHead->pNext        1——2        第 1 个后面
//  pos= 3,i= 0,1,2     2                                   2——3        第 2 个后面
    while (q != NULL && i < pos-1){
        q = q->pNext;
        i++;
    }
    if(i <= 0 || q == NULL){
        printf("插入位置出错!error:%dn", pos);
        return false;
    }

    printf("请录入插入学生信息:n");
    printf("姓名:");
    scanf("%s", pNew->name);
    printf("学号:");
    scanf("%d",&(pNew->id));

//  q 后面插入 数据,插入位置是在 q 后面
    pNew->pNext = q->pNext;
    q->pNext = pNew;
    return true;
}
bool delete_list(Stu * pHead, int pos){
    int i = 0;
    Stu * q = pHead;
    while (q != NULL && i < pos-1){
        ++i;
        q = q->pNext;
    }
    if(pos <= 0 || q == NULL){
        printf("删除位置出错!error:%dn", pos);
        return false;
    } else{
        printf("删除成功,您删除的信息:姓名:%s  学号:%dn", q->pNext->name, q->pNext->id);
    }
    Stu * p = q->pNext;
    q->pNext = q->pNext->pNext;
    free(p);
    return true;
}
void sort_list(Stu * pHead){

    int i;
    int j;
    Stu * p;
    Stu * q;
    int len = length_list(pHead);
    for (i = 0, p = pHead->pNext; i < len-1; ++i, p = p->pNext) {
        for (j = i+1, q = p->pNext; j < len; ++j, q = q->pNext) {
            if(p->id > q->id){
                Stu * t = p;
                p = q;
                q = t;
            }
        }
    }
    return;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存