实验一(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);
}