C语言 链表 这个题目怎么做?
描述编写一个程序,首先根据用户的输入信息创建一条链表LA,每个链表结点的内容为学生的学号(正整数),各结点之间按学号升序排列。然后再根据用户的输入信息创建另一条链表LB,...
描述
编写一个程序,首先根据用户的输入信息创建一条链表LA,每个链表结点的内容为学生的学号(正整数),各结点之间按学号升序排列。然后再根据用户的输入信息创建另一条链表LB,每个链表结点包括学生的学号S和一个运算符O,O的值为“增加”或“删除”。接下来,程序将对LB的每个结点进行分析,如果O的值为“增加”,则在链表LA中新增一个结点,其学号即为S;如果O的值为“删除”,则在链表LA中,找到学号为S的结点并将其删除。在经过上述处理后,要求LA中的结点依然按学号升序排列。
说明:(1)在创建链表时,为了减少内存空间的浪费,必须采用 动态链表 的方法,即每一个链表结点都是根据需要动态创建的;(2)为了增强程序的可读性,应采用多函数的形式来实现,至少应包含如下的函数:创建链表、打印链表等。
输入
第一行是一个整数M,表示链表LA的结点个数,接下来有M行,每一行是一个整数si,表示第i个结点的学号(按照从小到大排序)。接下来的一行是一个整数N,表示链表LB的结点个数,再接下来有N行,每一行是两个整数si和oi,其中,si表示第i个结点的学号(按照从小到大排序),oi表示运算符,oi=1表示“增加”结点,oi =0表示“删除”结点。
输出
输出经过处理以后的链表LA的内容。假设该链表共有K个结点,则输出有K行,每一行是一个整数,即相应的学号。
输入样例
4
1001
1003
1005
1007
2
1002 1
1007 0
输出样例
1001
1002
1003
1005
我写了一小段
struct LA
{
int ID;
struct LA* next;
};
struct LA *CreateA()
{
int num,IDnum,i;
struct LA *head,*p,*q;
scanf("%d",&num);
head = p = q = NULL;
i=0;
while (i<num)
{
scanf("%d",&IDnum);
p = (struct LA *) malloc (sizeof ( struct LA ));
p->ID=IDnum;
if (head==NULL) head = p;
else q->next=p;
q = p;
i++;
}
if(head!=NULL) q->next=NULL;
return (head);
结果调用
int main ()
{
struct LA * head;
head = CreateA; 它说这句有问题
} 展开
编写一个程序,首先根据用户的输入信息创建一条链表LA,每个链表结点的内容为学生的学号(正整数),各结点之间按学号升序排列。然后再根据用户的输入信息创建另一条链表LB,每个链表结点包括学生的学号S和一个运算符O,O的值为“增加”或“删除”。接下来,程序将对LB的每个结点进行分析,如果O的值为“增加”,则在链表LA中新增一个结点,其学号即为S;如果O的值为“删除”,则在链表LA中,找到学号为S的结点并将其删除。在经过上述处理后,要求LA中的结点依然按学号升序排列。
说明:(1)在创建链表时,为了减少内存空间的浪费,必须采用 动态链表 的方法,即每一个链表结点都是根据需要动态创建的;(2)为了增强程序的可读性,应采用多函数的形式来实现,至少应包含如下的函数:创建链表、打印链表等。
输入
第一行是一个整数M,表示链表LA的结点个数,接下来有M行,每一行是一个整数si,表示第i个结点的学号(按照从小到大排序)。接下来的一行是一个整数N,表示链表LB的结点个数,再接下来有N行,每一行是两个整数si和oi,其中,si表示第i个结点的学号(按照从小到大排序),oi表示运算符,oi=1表示“增加”结点,oi =0表示“删除”结点。
输出
输出经过处理以后的链表LA的内容。假设该链表共有K个结点,则输出有K行,每一行是一个整数,即相应的学号。
输入样例
4
1001
1003
1005
1007
2
1002 1
1007 0
输出样例
1001
1002
1003
1005
我写了一小段
struct LA
{
int ID;
struct LA* next;
};
struct LA *CreateA()
{
int num,IDnum,i;
struct LA *head,*p,*q;
scanf("%d",&num);
head = p = q = NULL;
i=0;
while (i<num)
{
scanf("%d",&IDnum);
p = (struct LA *) malloc (sizeof ( struct LA ));
p->ID=IDnum;
if (head==NULL) head = p;
else q->next=p;
q = p;
i++;
}
if(head!=NULL) q->next=NULL;
return (head);
结果调用
int main ()
{
struct LA * head;
head = CreateA; 它说这句有问题
} 展开
展开全部
#include <stdio.h>
#include <malloc.h>
struct list {
int ID;
struct list *next;
};
struct list *CreateList() {
int num,i;
struct list *head,*p;
scanf("%d",&num);//num: 链表结点个数
head = p = (struct list *)malloc(sizeof(struct list));//这是链表的头结点
i = 0;
while (i < num) {
p->next = (struct list *)malloc(sizeof(struct list));
scanf("%d",&p->next->ID);
p = p->next;
i++;
}
p->next = NULL;
return (head);
}
int main () {
struct list * head;
head = CreateList();
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询