c++创建学生链表,进行链表的插入、删除、查找操作,

1、使用函数模板 2、使用NEW和DELETE进行动态内存的分配好释放

学到指针,也要开始学习C语言的调试技能了,发现问题,最好自己调试解决。

如果编程软件支持断点,单步调试等功能那就最好了,如果不支持,也可以使用printf()语句打印相关的变量值来进行调试。

主要问题出在scan()函数
scan(struct linklist1 *a,struct linklist2 *b,struct linklist1 **p,struct linklist2 **q)
{
struct linklist1 *m;
int i=0,u=0;
m=a->next;
while(a->next!=0)
{a=a->next;
i++;
if(a->xh>m->xh)/*当只剩下一个记录时,u=0*/
{m=a;
u=i;
}
}
*p=m;
for(i=0;i<u;i++) /* u=0时,这个循环不会执行 */
b=b->next;
*q=b; /* u=0时,这里就出错了 */
}

修改后的代码,有简单的调试信息输出
#include "stdio.h"
struct linklist1
{
int xh;
struct linklist1 *next;
};
struct linklist2
{
int grade;
struct linklist2 *next;
};

struct conlink
{
int xh;
int grade;
struct conlink *next;
};

struct linklist1 *creat1()
/**创建单链表a**/
{
int i;
struct linklist1 *head,*p,*q;
head=(struct linklist1 *)malloc(sizeof(struct linklist1));
p=q=head;
printf("please input 5 xh:\n");
for(i=0;i<5;i++)
{p=(struct linklist1 *)malloc(sizeof(struct linklist1));
scanf("%d",&(p->xh));
p->next=0;
q->next=p;
q=p;
}
return head;
}

struct linklist2 *creat2()
/**创建单链表b**/
{int i;
struct linklist2 *head,*p,*q;
head=(struct linklist2 *)malloc(sizeof(struct linklist2));
p=q=head;
printf("please input 5 grade:\n");
for(i=0;i<5;i++)
{p=(struct linklist2 *)malloc(sizeof(struct linklist2));
scanf("%d",&(p->grade));
p->next=0;
q->next=p;
q=p;
}
return head;
}

scann(struct linklist1 *a,struct linklist2 *b,struct linklist1 **p,struct linklist2
**q)
/**查找单链表中学号最大的结点,存入*p,对应的成绩存入*q**/
{
struct linklist1 *m = a->next;
printf("scan()...\n");
while(a->next && b->next)
{
a=a->next;
b=b->next;
if(a->xh >= m->xh)
{
*p=a;
*q=b;
printf("xh=%d grade = %d\n", (*p)->xh, (*q)->grade);
getch();
}
}
}

conlink(struct conlink *head,struct linklist1 *p,struct linklist2 *q)
/**用头插法建立单链表c**/
{
struct conlink *a;
printf("conlink()...\n");
a=(struct conlink *)malloc(sizeof(struct conlink));
a->xh=p->xh;
a->grade=q->grade;
a->next=head->next;
head->next=a;
}

outlist1(struct linklist1 *head,struct linklist1 *p)
/**删除a单链表中学号最大的结点(最大的结点用scan函数已经找出)**/
{
while(head->next && head->next!=p)
head=head->next;
head->next=p->next;
free(p);
}

outlist2(struct linklist2 *head,struct linklist2 *q)
/**删除b单链表中对应的结点**/
{
while(head->next && head->next!=q)
head=head->next;
head->next=q->next;
free(q);
}

output(struct conlink *head)
/**输出c链表**/
{
while(head->next!=0)
{
printf("%d %d\n",head->next->xh,head->next->grade);
head=head->next;
}
}

main()
{
struct linklist1 *a;
struct linklist2 *b;
struct linklist1 *p;
struct linklist2 *q;
struct conlink *head;
a=creat1();
b=creat2();
head=(struct conlink *)malloc(sizeof(struct conlink));
head->next=0;
while(a->next!=0)
{
scan(a,b,&p,&q);
conlink(head,p,q);
outlist1(a,p);
outlist2(b,q);
}
output(head);
getch();
}
追问

没有这么复杂吧,我只需要能查找学生的姓名。性别就可以

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答