【实验1】
建立一个链表(带头结点),每个结点包括:学号,姓名,年龄,分数。输入时以学号-1结束,
然后输出该链表每个元素的值
【实验2】
对于实验1建立的链表,输入一个学生信息,然后插入到链表最后。输出链表值。
【实验3】
对于实验1建立的链表,输入一个年龄,如果链表中结点所包含的年龄等于此年龄,则将此结点删除。输出链表的值
提示:首先让p指向头结点,r指向第1个结点,然后判断r中的年龄是否与输入年龄相等,如果不相等,p和r同时向后移动,然后继续判断
没有学习相关知识,在网上找到的相关代码也不知道如何运行,与网上相似题目 的要求也不同,不知道该怎么改动
>没有学习相关知识,
请问你学过什么知识呢? struct,指针,数组 学过么? 你具体的困难是在哪里?
# include "stdio.h"
# include "stdlib.h"
typedef struct node
{
int sid;
char name[20];
int score;
int age;
struct node* next;
}node;
node *creatlink(int n);
void panduan(int ag, node* a);
void printlink(node *a);
int main()
{
node* a = creatlink(6);
printf("未删除前:\n");
printlink(a);
int ag;
printf("请输入一个要删除的年龄:\n") ;
scanf("%d",&ag);
panduan(ag, a);
printf("删除后:\n");
printlink(a);
return 0;
}
node *creatlink(int n)
{
node* p = (node*)malloc(sizeof(node));
node* p2 = NULL;
while(n--)
{
node* q = (node*)malloc(sizeof(node));
printf("请输入节点内容(学号 姓名 分数 年龄):\n");
scanf("%d %s %d %d", &q->sid, q->name, &q->score, &q->age);
if (p2 == NULL)
{
p->next = q;
p2 = q;
}
else
{
p2->next = q;
p2 = q;
}
}
p2->next = NULL;
return p;
}
void panduan(int ag, node* a)
{
node* q = NULL;
node* qfront = NULL;
for (q = a->next, qfront = a; q!= NULL;)
{
if (q->age == ag)
{
qfront->next = q->next;
node* t = q;
free(t);
q = q->next;
}
else
{
q = q->next;
qfront = qfront->next;
}
}
}
void printlink(node* a)
{
node* p = NULL;
for (p = a->next; p != NULL; p = p->next)
{
printf("%d %s %d %d\n", p->sid, p->name, p->score, p->age);
}
}
就比如我查到的这个代码,我输入1 小明 55 15
2 小红 56 16
输入完学生信息后,不知道如何停止输入学生信息,不知道如何输入年龄来完成删除对应年龄的学生信息。目前只学过循环,指针和结构体刚开始涉及
不好意思,刚看懂点这个代码要求输入6个学生的信息,那我想无限输入,最后以-1结尾该怎么修改。附上我的题目的要求:
{建立一个链表(带头结点),每个结点包括:学号,姓名,年龄,分数。输入时以学号-1结束,
然后输出该链表每个元素的值}
#include <stdio.h>
#include <stdlib.h>
typedef struct stu{
int num;
char name[10];
char sex;
int age;
struct stu *next;
}STU,*STUP; //声明一个结构体,里面包含学号、姓名、性别、年龄,还该结构体指针。
#define LEN sizeof(STU)
int main()
{
STUP head;
STUP creat(void); //建立链表函数。
STUP delet(STUP head,int age_temp);//删除要求年龄函数。
void print(STUP head);//输出链表函数
int age_temp;
printf("请输入学号、姓名、性别、年龄:\n");
head=creat();
print(head);
printf("请输入要删除的年龄:\n");
scanf("%d",&age_temp);
head=delet(head,age_temp);
printf("输出删除后的信息:\n");
print(head);
}
STUP creat(void) //建立链表函数
{
STUP p1,p2,head;
int n=0;
p1=p2=(STUP)malloc(LEN);
head=NULL;
scanf("%d %s %c %d\n",&p1->num,p1->name,&p1->sex,&p1->age);
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else p2->next=p1;
p2=p1;
p1=(STUP)malloc(LEN);
scanf("%d %s %c %d\n",&p1->num,p1->name,&p1->sex,&p1->age);
}
p2->next=NULL;
return head;
}
void print(STUP head) //输出链表函数
{
STUP p;
p=head;
if(head!=NULL)
do{
printf("%5d %7s %4c %5d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}while(p!=NULL);
}
STUP delet(STUP head,int age_temp) //删除要求年龄函数
{
STUP h,p;
h=(STUP)malloc(LEN); //创建一个空结点
h->next=head;
head=h;
for(p=head;p->next!=NULL;p=p->next)
if(p->next->age==age_temp)
p->next=p->next->next;
head=head->next;
return head;
}
这个代码也不知道如何正确输入,望告知,谢谢