定义单向链表struct Node并实现:输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,再输入一个成绩值,将成绩小于该值的学生信息删除,并将成绩大于等于该值的学生信息输出。
输入输出示例:括号内为说明
输入样例:
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0
80
输出样例:
2 wang 80
4 zhao 85
#include<iostream>
#define ok 1
#define error 0
using namespace std;
typedef int status;
//定义一个student类型的结构体
typedef struct
{
int sno; //学号
string sname; //姓名
int grade; //成绩
}student;
typedef struct LNode
{
student data; //学生类型的数据域
struct LNode *next; //指针域
} LNode, *LinkList;
//函数声明
status InitList(LinkList &L);
status CreatList_R(LinkList &L);
status DispList(LinkList L);
status DeleteList(LinkList &L,int e);
int main()
{
LinkList L;
InitList(L);
CreatList_R(L);
int flag;
cin >> flag;
LNode *d = L->next; //新结点d指向首元结点
while(d)
{
if(d->data.grade < flag) //如果输入的成绩小于 flag
{
int a = d->data.grade; //把新结点的成绩存放在a中
d = d->next; //结点d指向下一结点
DeleteList(L, a); //删除L表中成绩为“a ”(a里面存放的是结点d的成绩信息)的结点
}
else
d = d->next;
}
DispList(L); //输出
return 0;
}
//初始化
status InitList(LinkList &L)
{
L = new LNode;
L->next = NULL;
return ok;
}
//尾插法创建单链表
status CreatList_R(LinkList &L)
{
int e ;
LNode *r = L; //尾指针指向头结点
while (1)
{
cin >> e ;
if (e != 0) //如果输入0,就终止循环
{
LNode *p = new LNode; //生成新结点
p->data.sno = e; //将输入的学号信息存放在新结点的学号数据域中
cin >> p->data.sname ; //输入学生姓名
cin >> p->data.grade ; //成绩
r->next = p; //尾指针指向新结点p(此时新结点成为新的尾指针)
p->next = NULL; //新结点的next域置空
r = p; //尾指针指向新结点
}
else
break;
}
return ok;
}
//删除 链表中成绩等于e的结点
status DeleteList(LinkList &L,int e)
{
LNode *p = L->next; //P指向首元结点
LNode *q = L; //q初始化指向头结点 (其实也就相当于,p指向要删除的结点,q指向删除节点的前驱结点)
while(p->data.grade != e && p) //如果成绩不等于e并且p不为空
{
p = p->next; //p, q指向下一个结点
q = q->next;
}
if(p->data.grade == e) //如果成绩等于e
{
q->next = p->next; //删除结点p
delete p;
return ok;
}
else
return error;
}
//输出
status DispList(LinkList L)
{
LNode *p = L->next; //p指向首元结点
while(p) //p不为空就输出学生信息
{
cout << p->data.sno << " " ;
cout << p->data.sname <<" " ;
cout << p->data.grade ;
if (p->next != NULL)
cout << endl;
p = p->next; //p不为空p就继续往“后”移动指向下一结点
}
return ok;
}
版权声明:本文为qq_62175345原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。