算法与数据结构实验一(2)单链表

实验一(2)单链表

// 算法与数据结构实验一-单链表 by 022116213 陈松

/*1. 设单链表的数据为互不相等的整数,建立一个单

链表,并设计一个算法, 找出单链表中元素值最大

的结点。

要求:

(1)单链表的数据从键盘输入;

(2)输出单链表所有结点的数据和最大值结点序号。*/

#include <iostream>

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define N 10

using namespace std;

typedef int ElemType;

typedef struct LNode

{

ElemType  data;

struct LNode* next;

}LNode, * LinkList;

int MaxNode(LinkList h)

{

int j, k;

LNode* p, * q;

if (h->next == NULL) return 0;

q = h->next;   p = q->next;

k = 1; j = 2;

while (p != NULL)

{

if (p->data > q->data) { q = p; k = j; }

p = p->next; j++;

}

return k;

}//MaxNode

int output(LinkList h)

{

LNode* q;

if (h->next == NULL) return 0;

q = h->next;

while (q != NULL)

{

cout << q->data << " ";

q = q->next;

}

}

void CreateLink(LinkList& h, ElemType a[], int n)

{

LNode* s, * r; int i;

h = (LNode*)malloc(sizeof(LNode));

r = h;

for (i = 0; i < n; i++)

{

s = (LNode*)malloc(sizeof(LNode));

s->data = a[i];

r->next = s; r = s;

}

r->next = NULL;

}

void main()

{

LinkList head;

ElemType a[N];

int i, k;

cout << "请输入一组数:" << endl;

for (i = 0; i < N; i++) scanf_s("%d", &a[i]);

CreateLink(head, a, N);

cout << "所有数据:" << endl;

output(head);

cout << endl << "最大值节点序号:" << endl;

k = MaxNode(head);

cout << k << "  "; cout << endl;

}

// 算法与数据结构实验一-单链表 by 022116213 陈松

/*2. 设计算法,根据输入的学生人数和成绩建立一个单链表,并累计成绩不及格的人数。

要求:

(1)学生人数和成绩均从键盘输入;

(2)输出所有学生的成绩和不及格的人数。*/

#include <iostream>

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define N 10

using namespace std;

typedef int ElemType;

typedef int ElemType;

typedef struct node

{

ElemType data;

struct node* next;

} StudNode, * StudLink;

void create(StudLink& sl)

{

int i, n, score;

StudNode* s, * r;

sl = (StudNode*)malloc(sizeof(StudNode));

r = sl;

printf("学生人数:");

scanf_s("%d", &n);

for (i = 0; i < n; i++) {

s = (StudNode*)malloc(sizeof(StudNode));

printf("输入成绩:");

scanf_s("%d", &score);

s->data = score;

r->next = s;

r = s;

}

r->next = NULL;

}

int output(StudLink sl)

{

StudNode* q;

if (sl->next == NULL) return 0;

q = sl->next;

while (q != NULL)

{

printf("%d\t", q->data);

q = q->next;

}

}

int count(StudLink sl)

{

int n = 0;

StudNode* p = sl->next;

while (p != NULL)

{

if (p->data < 60) n++;

p = p->next;

}

return n;

}

void main()

{

int n;

StudLink h;

create(h);

n = count(h);

printf("所有学生的成绩:");

output(h);

printf("\n不及格人数:%d\n", n);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dr.木公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值