首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C语言 链表各种有关问题

2012-06-15 
C语言 链表各种问题结构:struct student//创建数据结构{charnum[10]/*学号*/char name[20]//姓名int cgr

C语言 链表各种问题
结构:
struct student //创建数据结构
{
 char num[10];/*学号*/
 char name[20];//姓名
 int cgrade;//C语言分数
 int mgrade;//数学分数
 int egrade;//英语分数
 int totle;//总分
 int ave;//平均分
};

typedef struct node//链表
{
 struct student data;
 struct node *next;
} Node,*Link;

问题1
Node *s;

Char lastnum[10]="-1";
lastnum=s->data.num;

问题: 这个哪里不对啊;

问题2
怎么对这个结构的链表排序输出
void Cpaixu(Link l)
{
Link p,q,small,a;
Link temp;
a=l->next;

for(q=a->next;a->next!=NULL;q=a->next)
{
small = q;
q=a->next
for(q=p->next;q;q=q->next)
{
if(q->data.cgrade<small->data.cgrade)
{
small=q;
}
}

if(small->data.cgrade!=p->data.cgrade)
{
temp=p;
p=small;
small=temp;
}
}
}

貌似一点都不对..... 





[解决办法]
Char lastnum[10]="-1";
lastnum=s->data.num;
-----------------------
1)data是什么? 什么变量?怎么声明定义的?
2)对数组赋值是这样的? 同学c语言基本常识要好好看看。

for(q=p->next;q;q=q->next) 很奇怪 p->next访问 你不会出core么? p声明定义了一次后都没初始化。
[解决办法]
Char lastnum[] ===> 应该是小写的“char"吧。
lastnum=s->data.num; ==>字符串的赋值用strcpy(lastnum, s->data.num);

后面的指针赋值出错的话,就单步调试吧。太乱了。
[解决办法]

C/C++ code
#include<stdio.h>#include<stdlib.h>  /*使用到其中的malloc和exit函数*/#define times 4  /*用于循环次数的控制*/static int N = 4; /*静态全局变量,用于控制单链表长度*/typedef struct _person {    char name[12];    int age;    struct _person* next;} stud;stud* Create(int num)  /*创建单链表的函数,num为单链表的长度*/{    int i;    stud* h, *p, *q; /* h为头指针,指向单链表的第一个节点*/    h = (stud*)malloc(sizeof(stud));    if (h != NULL) {        p = h;        for (i = 0; i < num; i++) {            q = (stud*)malloc(sizeof(stud)); /* q为指向新建节点的指针*/            if (q != NULL) {                printf("依次输入第%d个人的姓名和年龄:\n", i + 1);                scanf("%s%d", q->name, &q->age);                q->next = NULL; /*创建新节点完毕*/                p->next = q;                p = q;            }        }    }    printf("\n");    return(h);}stud* Delete(stud* person, int post) /*删除单链表指定位置节点的函数*/{    int i;    stud* cur, *pre;    cur = person;    if (0 == post) { /*如果输入的值为0,则不删除任何节点*/        printf("\n注意:您决定不删除任何节点!!!\n\n");        return(person);    } else if (post > N || post < 0) { /*如果输入的值大于单链表长度或者小于0,程序结束*/        printf("输入有误,程序终止。\n");        exit(1);    } else {        if (1 == post) { /*在单链表头部删除的情况*/            cur = cur->next;            person->next = cur->next;            free(cur);        } else { /*在其它位置删除的情况*/            for (i = 2; i < post + 1; i++) { /*使pre成为要插入位置的上一位置的节点*/                cur = cur->next;                pre = cur;            }            cur = cur->next;            pre->next = cur->next;            free(cur);        }        return(person);    }}stud* Insert(stud* person, int post)  /*在单链表指定位置插入新的节点的函数*/{    int i;    stud* cur, *pre, *node;    if (post > N + 1 || post < 1) { /*如果输入的值大于单链表长度加1或者小于1,程序结束*/        printf("输入错误,程序终止。\n");        exit(1);    }    if (person != NULL) {        cur = person;        node = (stud*)malloc(sizeof(stud));        if (node != NULL) {            printf("请输入新人的姓名和年龄:\n");            scanf("%s%d", node->name, &node->age); /*为新的节点输入数据内容*/            if (1 == post) {                node->next = person->next;                person->next = node;            } else {                for (i = 2; i < post + 2; i++) {                    pre = cur;                    cur = cur->next;                }                node->next = pre->next;                pre->next = node;            }        }    }    printf("\n");    return(person);}void Print(stud* person){    int post = 1;    stud* cur;    cur = person->next;    printf("当前的节点信息如下所示:\n");    while (cur != NULL) {        printf("第%d个人的姓名是:%s,年龄为:%d\n", post, cur->name, cur->age);        cur = cur->next;        post++;    }    N = --post;    printf("当前单链表的长度是:%d\n\n", N);}int main(){    int number, post, i;    stud* head;    head = Create(N);    Print(head);    for (i = 0; i < times; i++) {        printf("请输入要删除的节点的位置:\n");        scanf("%d", &number);        Delete(head, number);        Print(head);        printf("请输入要插入节点的位置(此位置是指预期插入成功后新节点在单链表中的位置):\n");        scanf("%d", &post);        Insert(head, post);        Print(head);        printf("\n注意:剩余输入轮数为:%d  !!!!!\n\n", (times - (i + 1)));    }    return 0;} 


[解决办法]
首先 第一个肯定不行 因为
Char lastnum[10]="-1";--------这个地方lastnum是定义的一个字符数组变量
lastnum=s->data.num;----------这个地方有问题 主要是lastnum做为指针的时候是常量指针 怎么能作为左值呢 ?

[解决办法]
给个建议 优化一下代码
变量命名太乱了
[解决办法]
lastnum 是数组指针,是常量,怎么能赋值?

热点排行