c语言链表,循环插入,循环双链表插入一直有有关问题

C/C++ code#include

#include

#include

#define N 100

typedef struct student

{

int studentID;

char name[N];

int age;

int sex;

}STUDENT;

typedef struct score

{

int chinese;

int math;

int english;

int average;

int total;

}SCORE;

typedef struct node

{

STUDENT stu;

SCORE sc;

struct node *next;

struct node *pione;

}NODE;

extern NODE * mycreate();

extern void myinsert(NODE *,STUDENT *,SCORE *);

extern void mycopy(NODE *,STUDENT *,SCORE *);

extern void myprint(NODE *);

void mycopy(NODE *node,STUDENT *student,SCORE *score)

{

node->stu.studentID = student->studentID;

strcpy(node->stu.name,student->name);

node->stu.age = student->age;

//printf("age = %d\n",node->stu.age);

node->stu.sex = student->sex;

node->sc.chinese = score->chinese;

node->sc.math = score->math;

node->sc.english = score->english;

node->sc.average = score->average;

node->sc.total = score->total;

//return node;

}

NODE * mycreate()

{

NODE *head = (NODE *)malloc(sizeof(NODE *));

head->stu.studentID = 0;

head->next = head;

head->pione = head;

return head;

}

void myinsert(NODE *head,STUDENT *student,SCORE *score)

{

//NODE *p = (NODE *)malloc(sizeof(NODE *));

//mycopy(p,student,score);

if(head->stu.studentID == 0)

{

mycopy(head,student,score);

myprint(head);

}

else

{

NODE *last = head;

//NODE *p = (NODE *)malloc(sizeof(NODE *));

//mycopy(p,student,score);

printf("bwhile\n");

while(last->next != head)

{

last = last->next;

}

printf("awhile\n");

NODE *p = (NODE *)malloc(sizeof(NODE *));

//memset(p,0,sizeof(p));

//last = (NODE *)malloc(sizeof(NODE *));

mycopy(p,student,score);

//printf("age--- = %d\n",p->stu.age);

head->pione = p;

//p->next = head;

printf("age1 = %d\n",p->stu.age);

last->next = p;

//p->pione = last->next;

printf("age2 = %d\n",p->stu.age);

//p->next = head;

//last->next = p;

printf("age3 = %d\n",p->stu.age);

p->pione = last;

p->next = head;

//last->next = p;

printf("age4 = %d\n",p->stu.age);

//last = p;

//mycopy(p,student,score);

//printf("duanduanduab\n");

//free(p);

//p = NULL;

}

//return head;

}

void myprint(NODE *head)

{

//NODE *q = head;

NODE *q = (NODE *)malloc(sizeof(q));

q = head;

int i = 1;

#if 1

while(q->next != head)

{

printf("No.%d:ID:%d\tName:%s\tAge:%d\tSex:%d\n",i,q->stu.studentID,q->stu.name,q->stu.age,q->stu.sex);

printf(" Chinese:%d\tMath:%d\tEnglish:%d\tAverage:%d\tTotal:%d\n",q->sc.chinese,q->sc.math,q->sc.english,q->sc.average,q->sc.total);

i++;

q = q->next;

printf("\n");

}

printf("No.%d:ID:%d\tName:%s\tAge:%d\tSex:%d\n",i,q->stu.studentID,q->stu.name,q->stu.age,q->stu.sex);

printf(" Chinese:%d\tMath:%d\tEnglish:%d\tAverage:%d\tTotal:%d\n",q->sc.chinese,q->sc.math,q->sc.english,q->sc.average,q->sc.total);

#endif

}

int main()

{

//dmes("asdasd");

NODE *head = mycreate();

STUDENT stu1;

STUDENT stu2;

STUDENT stu3;

STUDENT stu4;

SCORE sc1,sc2,sc3,sc4;

stu1.studentID = 12001;

strcpy(stu1.name,"王强");

stu1.age = 19;

stu1.sex = 1;

sc1.chinese = 90;

sc1.math = 91;

sc1.english = 92;

sc1.average = 91;

sc1.total = 273;

stu2.studentID = 12002;

strcpy(stu2.name,"张芳");

stu2.age = 19;

stu2.sex = 0;

sc2.chinese = 80;

sc2.math = 81;

sc2.english = 82;

sc2.average = 81;

sc2.total = 243;

stu3.studentID = 12003;

strcpy(stu3.name,"李明");

stu3.age = 19;

stu3.sex = 1;

sc3.chinese = 70;

sc3.math = 71;

sc3.english = 72;

sc3.average = 71;

sc3.total = 213;

stu4.studentID = 12004;

strcpy(stu4.name,"王小雨");

stu4.age = 20;

stu4.sex = 0;

sc4.chinese = 60;

sc4.math = 61;

sc4.english = 62;

sc4.average = 61;

sc4.total = 183;

myinsert(head,&stu1,&sc1);

myprint(head);

printf("1111111\n");

myinsert(head,&stu2,&sc2);

myprint(head);

printf("2222222\n");

myinsert(head,&stu3,&sc3);

myprint(head);

printf("3333333\n");

myinsert(head,&stu4,&sc4);

myprint(head);

printf("444444444\n");

myprint(head);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值