feat(*): 代码仓库初始化
This commit is contained in:
17
DataStructure/README.md
Normal file
17
DataStructure/README.md
Normal file
@@ -0,0 +1,17 @@
|
||||
<!--
|
||||
Copyright (c) 2025 zhilv
|
||||
|
||||
This software is released under the MIT License.
|
||||
https://opensource.org/licenses/MIT
|
||||
-->
|
||||
|
||||
## 数据结构
|
||||
|
||||
### 文件介绍
|
||||
|
||||
```sh
|
||||
.
|
||||
├── test1 # 实验1
|
||||
├── test2 # 实验2
|
||||
└── test3 # 实验3
|
||||
```
|
||||
229
DataStructure/test1/实验一.cpp
Normal file
229
DataStructure/test1/实验一.cpp
Normal file
@@ -0,0 +1,229 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct LNode
|
||||
{
|
||||
int data; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct LNode *next; // ָ<><D6B8><EFBFBD><EFBFBD>
|
||||
} LNode, *LinkList; // LinkListΪָ<CEAA><D6B8>LNode<64><65><EFBFBD>͵<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
void chushihua(LinkList &L, LinkList &M, LinkList &N, LinkList &H) // <20><>ʼ<EFBFBD><CABC><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C>M<EFBFBD><4D>N<EFBFBD><4E>H
|
||||
{
|
||||
// todo list
|
||||
L = (LinkList)malloc(sizeof(LNode));
|
||||
M = (LinkList)malloc(sizeof(LNode));
|
||||
N = (LinkList)malloc(sizeof(LNode));
|
||||
H = (LinkList)malloc(sizeof(LNode));
|
||||
L->next = NULL; // ֱ<><D6B1><EFBFBD>ÿգ<C3BF><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
M->next = NULL;
|
||||
N->next = NULL;
|
||||
H->next = NULL;
|
||||
}
|
||||
void Emp(LinkList &L) // <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>ձ<EFBFBD>
|
||||
{
|
||||
// if (//todo list)
|
||||
if (L->next == NULL)
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
else
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǿձ<EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
}
|
||||
|
||||
void Length(LinkList L)
|
||||
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
LNode *p; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>p
|
||||
p = L->next; // pָ<70><D6B8><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>(<28><>Ԫ<EFBFBD><D4AA><EFBFBD>)
|
||||
int length = 0;
|
||||
// todo list //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ͳ<>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
|
||||
while (p != NULL)
|
||||
{
|
||||
length++;
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\n", length);
|
||||
}
|
||||
|
||||
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
||||
void xianshi(LinkList &L)
|
||||
{
|
||||
LNode *p; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>p //LinkList p;
|
||||
p = L;
|
||||
while (p->next != NULL)
|
||||
{
|
||||
printf("%4d", p->next->data);
|
||||
p = p->next;
|
||||
}
|
||||
printf("\n"); // <20><><EFBFBD>ӻ<EFBFBD><D3BB>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ڲ鿴
|
||||
}
|
||||
|
||||
// 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>в<EFBFBD><D0B2><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
||||
void charu_1(LinkList &L, int n)
|
||||
{
|
||||
LNode *q, *p;
|
||||
for (int i = 1; i <= n; i++)
|
||||
{
|
||||
p = L; // <20><>ÿ<EFBFBD><C3BF>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD>pָ<70><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>L
|
||||
q = (LinkList)malloc(sizeof(LNode)); // Ϊ<>µĽڵ<C4BD><DAB5><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD>qָ<71><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ", i);
|
||||
scanf("%d", &q->data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>洢<EFBFBD><E6B4A2>qָ<71><D6B8>Ľڵ<C4BD><DAB5>data<74>ֶ<EFBFBD><D6B6><EFBFBD>
|
||||
q->next = NULL; // <20><><EFBFBD>½ڵ<C2BD><DAB5>nextָ<74><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNULL<4C><4C><EFBFBD><EFBFBD>ʾ<EFBFBD>½ڵ㵱ǰ<E3B5B1><C7B0>ָ<EFBFBD><D6B8><EFBFBD>κνڵ㡣
|
||||
|
||||
// <20><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>λ<EFBFBD><CEBB>
|
||||
while (p->next != NULL && p->next->data < q->data)
|
||||
{
|
||||
p = p->next; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>½ڵ<C2BD>
|
||||
q->next = p->next;
|
||||
p->next = q;
|
||||
}
|
||||
}
|
||||
|
||||
// 2<><32><EFBFBD>ֽ⣺<D6BD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>е<EFBFBD>Ԫ<EFBFBD>ط<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><4D>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ǡ<EFBFBD>
|
||||
void fenbiao(LinkList &L, LinkList &M, LinkList &N)
|
||||
{
|
||||
LNode *j, *o, *p, *temp;
|
||||
p = L;
|
||||
while (p->next != NULL)
|
||||
{
|
||||
temp = p->next; // <20><><EFBFBD>浱ǰ<E6B5B1>ڵ<EFBFBD>
|
||||
p->next = temp->next; // <20><>ǰ<EFBFBD>ƶ<EFBFBD>p<EFBFBD><70>next<78><74><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
|
||||
if (temp->data % 2 == 0) // ż<><C5BC>Ԫ<EFBFBD>أ<EFBFBD>ǰ<EFBFBD>巨<EFBFBD><E5B7A8>M
|
||||
{
|
||||
o = (LinkList)malloc(sizeof(LNode));
|
||||
o->data = temp->data;
|
||||
o->next = M->next;
|
||||
M->next = o;
|
||||
}
|
||||
else // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>أ<EFBFBD>ǰ<EFBFBD>巨<EFBFBD><E5B7A8>N
|
||||
{
|
||||
j = (LinkList)malloc(sizeof(LNode));
|
||||
j->data = temp->data;
|
||||
j->next = N->next;
|
||||
N->next = j;
|
||||
}
|
||||
free(temp); // <20>ͷ<EFBFBD>ԭ<EFBFBD>ڵ<EFBFBD><DAB5>ڴ<EFBFBD>
|
||||
}
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD>Ϊ:");
|
||||
xianshi(N); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>N<EFBFBD><4E>
|
||||
printf("ż<EFBFBD><EFBFBD>Ϊ:");
|
||||
xianshi(M); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>Ӧ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>M<EFBFBD><4D>
|
||||
}
|
||||
|
||||
// 3<><33><EFBFBD>ϲ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>ϲ<EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48><EFBFBD>ϲ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>
|
||||
void hebiao(LinkList &J, LinkList &O, LinkList &H)
|
||||
{
|
||||
LNode *p, *q, *t, *m;
|
||||
p = J->next; // ָ<><D6B8><EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD>
|
||||
q = O->next;
|
||||
m = H; // m<>൱<EFBFBD><E0B5B1>βָ<CEB2>룬<EFBFBD><EBA3AC>ʼָ<CABC><D6B8>ͷ<EFBFBD>ڵ<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD>Hԭ<48><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
H->next = NULL;
|
||||
|
||||
while (p != NULL && q != NULL) // <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>
|
||||
{
|
||||
if (p->data > q->data) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
{
|
||||
t = (LinkList)malloc(sizeof(LNode));
|
||||
t->data = p->data;
|
||||
t->next = NULL;
|
||||
m->next = t; // β<><CEB2>
|
||||
m = t; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8>
|
||||
p = p->next; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
}
|
||||
else // ȡż<C8A1><C5BC>
|
||||
{
|
||||
t = (LinkList)malloc(sizeof(LNode));
|
||||
t->data = q->data;
|
||||
t->next = NULL;
|
||||
m->next = t; // β<><CEB2>
|
||||
m = t; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8>
|
||||
q = q->next; // <20>ƶ<EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>루<EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>p<EFBFBD><70>
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
||||
while (p != NULL)
|
||||
{
|
||||
t = (LinkList)malloc(sizeof(LNode));
|
||||
t->data = p->data;
|
||||
t->next = NULL;
|
||||
m->next = t;
|
||||
m = t;
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ż<EFBFBD><C5BC><EFBFBD>ڵ<EFBFBD>
|
||||
while (q != NULL)
|
||||
{
|
||||
t = (LinkList)malloc(sizeof(LNode));
|
||||
t->data = q->data;
|
||||
t->next = NULL;
|
||||
m->next = t;
|
||||
m = t;
|
||||
q = q->next; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>p
|
||||
}
|
||||
|
||||
printf("<EFBFBD>Ӵ<EFBFBD>С<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>");
|
||||
xianshi(H); // <20><>ʾ<EFBFBD>ϱ<EFBFBD>H
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD>Ϊͷ<CEAA><CDB7>㣬<EFBFBD><E3A3AC>ͷָ<CDB7><D6B8>ֱ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
||||
LinkList head = (LinkList)malloc(sizeof(LNode));
|
||||
LinkList ji = (LinkList)malloc(sizeof(LNode));
|
||||
LinkList ou = (LinkList)malloc(sizeof(LNode));
|
||||
LinkList he = (LinkList)malloc(sizeof(LNode));
|
||||
|
||||
int choose = -1, n;
|
||||
printf("*********************************************\n");
|
||||
printf("********** ʵ<><CAB5>һ *******\n");
|
||||
printf("*********************************************\n");
|
||||
printf("********** 1.<2E><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
|
||||
printf("********** 2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
|
||||
printf("********** 3.<2E>ֳ<EFBFBD><D6B3><EFBFBD>/ż<><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
|
||||
printf("********** 4.<2E>ϲ<EFBFBD><CFB2>ɵݼ<C9B5><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
|
||||
printf("********** 5.<2E><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
|
||||
printf("********** 6.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
|
||||
printf("********** 7.<2E>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA> *******\n");
|
||||
printf("********** 0.<2E>˳<EFBFBD> *******\n");
|
||||
printf("*********************************************\n");
|
||||
while (choose)
|
||||
{
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
scanf("%d", &choose);
|
||||
switch (choose)
|
||||
{
|
||||
case 1:
|
||||
chushihua(head, ji, ou, he);
|
||||
break;
|
||||
case 2:
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
scanf("%d", &n);
|
||||
charu_1(head, n);
|
||||
break;
|
||||
case 3:
|
||||
fenbiao(head, ou, ji);
|
||||
break;
|
||||
case 4:
|
||||
hebiao(ji, ou, he);
|
||||
break;
|
||||
case 5:
|
||||
xianshi(head);
|
||||
break;
|
||||
case 6:
|
||||
Length(head);
|
||||
break;
|
||||
case 7:
|
||||
Emp(head);
|
||||
break;
|
||||
case 0:
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
233
DataStructure/test2/实验二.cpp
Normal file
233
DataStructure/test2/实验二.cpp
Normal file
@@ -0,0 +1,233 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct PNode
|
||||
{
|
||||
int index; // 指数
|
||||
int coe; // 系数
|
||||
struct PNode *next; // 指针域
|
||||
} PNode, *Polynomial;
|
||||
|
||||
void chushihua(Polynomial &L, Polynomial &M, Polynomial &N)
|
||||
{
|
||||
// todo list
|
||||
L = (Polynomial)malloc(sizeof(PNode));
|
||||
M = (Polynomial)malloc(sizeof(PNode));
|
||||
N = (Polynomial)malloc(sizeof(PNode));
|
||||
L->next = NULL;
|
||||
M->next = NULL;
|
||||
N->next = NULL;
|
||||
}
|
||||
void Emp(Polynomial &L)
|
||||
{
|
||||
if (L->next == NULL)
|
||||
printf("链表为空表。\n");
|
||||
else
|
||||
printf("链表为非空表。\n");
|
||||
}
|
||||
|
||||
void Length(Polynomial &L)
|
||||
{
|
||||
PNode *p;
|
||||
int length = 0;
|
||||
// todo list //while循环,不断往后移动p指针,并让length++
|
||||
p = L;
|
||||
while (p->next != NULL)
|
||||
{
|
||||
p = p->next;
|
||||
length++;
|
||||
}
|
||||
|
||||
printf("链表长度为:%d\n", length);
|
||||
}
|
||||
|
||||
// 1、构造两个按指数递增的有序链表:插入节点,创建一元多项式
|
||||
void charu_1(Polynomial &L)
|
||||
{
|
||||
PNode *q, *p;
|
||||
int n;
|
||||
printf("请输入你要创建的一元多项式的项数:\n");
|
||||
scanf("%d", &n);
|
||||
for (int i = 1; i <= n; i++)
|
||||
{
|
||||
p = L;
|
||||
q = (Polynomial)malloc(sizeof(PNode));
|
||||
printf("请输入第%d项的系数和指数:", i);
|
||||
scanf("%d%d", &q->coe, &q->index);
|
||||
q->next = NULL;
|
||||
while (p->next != NULL && p->next->index < q->index)
|
||||
{
|
||||
// todo list p指针移动到最后一个结点位置
|
||||
p = p->next;
|
||||
}
|
||||
// todo list 将*q结点插入到*p结点后
|
||||
q->next = p->next;
|
||||
p->next = q;
|
||||
}
|
||||
}
|
||||
|
||||
void xianshi(Polynomial &L)
|
||||
{
|
||||
PNode *p;
|
||||
p = L;
|
||||
while (p->next != NULL)
|
||||
{
|
||||
printf("%4d", p->next->coe); // 系数
|
||||
printf("H");
|
||||
printf("%d", p->next->index); // 指数
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
// 2、两个一元多项式相加
|
||||
void hebiao(Polynomial &J, Polynomial &O, Polynomial &H)
|
||||
{
|
||||
PNode *p = J->next, *q = O->next, *r = H, *s; // r是尾指针
|
||||
while (p != NULL && q != NULL)
|
||||
{
|
||||
if (p->index < q->index)
|
||||
{
|
||||
s = (Polynomial)malloc(sizeof(PNode));
|
||||
// todo list //保存p指向结点的系数和指数到s所指向结点中的系数和指数中
|
||||
s->coe = p->coe;
|
||||
s->index = p->index;
|
||||
// todo list //插入s所指向结点到r所指向结点的后面
|
||||
s->next = NULL;
|
||||
r->next = s;
|
||||
|
||||
r = s; // 更新尾指针
|
||||
p = p->next; // 更新p指针
|
||||
}
|
||||
else if (p->index > q->index)
|
||||
{
|
||||
s = (Polynomial)malloc(sizeof(PNode));
|
||||
// todo list //保存q指向结点的系数和指数到s所指向结点中的系数和指数中
|
||||
s->coe = q->coe;
|
||||
s->index = q->index;
|
||||
// todo list //插入s所指向结点到r所指向结点的后面
|
||||
s->next = NULL;
|
||||
r->next = s;
|
||||
|
||||
r = s; // 更新尾指针
|
||||
q = q->next; // 更新q指针
|
||||
}
|
||||
else
|
||||
{ // 指数相等的情况
|
||||
int sum = p->coe + q->coe;
|
||||
if (sum != 0)
|
||||
{
|
||||
s = (Polynomial)malloc(sizeof(PNode));
|
||||
// todo list //保存p指向结点的指数到s所指向结点中的指数中
|
||||
s->index = p->index;
|
||||
// todo list //保存sum到s所指向结点中的系数中
|
||||
s->coe = sum;
|
||||
// todo list //插入s所指向结点到r所指向结点的后面
|
||||
s->next = NULL;
|
||||
r->next = s;
|
||||
|
||||
r = s; // 更新尾指针
|
||||
}
|
||||
p = p->next; // 更新p指针
|
||||
q = q->next; // 更新q指针
|
||||
}
|
||||
}
|
||||
while (p != NULL)
|
||||
{ // J链表非空,还剩余有元素,把其剩余的元素插入到合表H链表后面
|
||||
s = (Polynomial)malloc(sizeof(PNode));
|
||||
// todo list 尾插
|
||||
s->coe = p->coe;
|
||||
s->index = p->index;
|
||||
s->next = NULL;
|
||||
r->next = s;
|
||||
r = s;
|
||||
|
||||
p = p->next; // 更新p指针
|
||||
}
|
||||
while (q != NULL)
|
||||
{ // O链表非空,还剩余有元素,把其剩余的元素插入到合表H链表后面
|
||||
s = (Polynomial)malloc(sizeof(PNode));
|
||||
// todo list 尾插
|
||||
s->coe = q->coe;
|
||||
s->index = q->index;
|
||||
s->next = NULL;
|
||||
r->next = s;
|
||||
r = s;
|
||||
|
||||
q = q->next; // 更新q指针
|
||||
}
|
||||
xianshi(H); // 新增
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
Polynomial head[3];
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
head[i] = (Polynomial)malloc(sizeof(PNode)); // head[0]表示第一个一元多项式链表,head[1]为第二个一元多项式链表
|
||||
}
|
||||
|
||||
int choose = -1, n;
|
||||
printf("*********************************************************\n");
|
||||
printf("********** 实验二 *******\n");
|
||||
printf("*********************************************\n");
|
||||
printf("********** 1.初始化单链表 *******\n");
|
||||
printf("********** 2.建立递增链表(按指数递增) *******\n");
|
||||
printf("********** 3.显示单链表整体 *******\n");
|
||||
printf("********** 4.求单链表长度 *******\n");
|
||||
printf("********** 5.判断单链表是否为空 *******\n");
|
||||
printf("********** 6.求一元多项式的和 *******\n");
|
||||
printf("********** 0.退出 *******\n");
|
||||
printf("*********************************************************\n");
|
||||
while (choose)
|
||||
{
|
||||
printf("请输入你的选择项:\n");
|
||||
scanf("%d", &choose);
|
||||
switch (choose)
|
||||
{
|
||||
case 1:
|
||||
chushihua(head[0], head[1], head[2]);
|
||||
printf("链表已经初始化。\n");
|
||||
break;
|
||||
case 2:
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
printf("创建的第%d个一元多项式:\n", i + 1);
|
||||
charu_1(head[i]); // 插入节点到指定链表
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
printf("显示第1个链表:");
|
||||
xianshi(head[0]); // 显示第1个链表
|
||||
printf("\n");
|
||||
printf("显示第2个链表:");
|
||||
xianshi(head[1]); // 显示第2个链表
|
||||
printf("\n");
|
||||
// xianshi(head[2]); // 显示第3个链表
|
||||
// printf("\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("计算第1个链表的长度:");
|
||||
Length(head[0]); // 计算 第1个链表的长度
|
||||
printf("计算第2个链表的长度:");
|
||||
Length(head[1]); // 计算 第2个链表的长度
|
||||
// Length(head[2]); //计算 第3个链表的长度
|
||||
break;
|
||||
case 5:
|
||||
printf("判断第1个链表是否为空:");
|
||||
Emp(head[0]); // 判断第1个链表是否为空
|
||||
printf("判断第2个链表是否为空:");
|
||||
Emp(head[1]); // 判断第2个链表是否为空
|
||||
// Emp(head[2]); // 判断第3个链表是否为空
|
||||
break;
|
||||
case 6:
|
||||
hebiao(head[0], head[1], head[2]);
|
||||
break;
|
||||
case 0:
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0; // 程序正常退出时返回0
|
||||
}
|
||||
129
DataStructure/test3/实验三.cpp
Normal file
129
DataStructure/test3/实验三.cpp
Normal file
@@ -0,0 +1,129 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAXSIZE 10
|
||||
typedef struct Queue
|
||||
{
|
||||
int *data; // 存储空间的基地址
|
||||
int front, rear; // 头指针、尾指针
|
||||
int count; // 新增一个 count变量,用于记录队中元素个数
|
||||
} Queue;
|
||||
|
||||
// 初始化队列
|
||||
void Init(Queue &Q)
|
||||
{
|
||||
Q.data = new int[MAXSIZE];
|
||||
// todo list 处理front, rear指针,以及count变量
|
||||
Q.front = 0;
|
||||
Q.rear = 0;
|
||||
Q.count = 0;
|
||||
}
|
||||
|
||||
// 入队
|
||||
void EnQueue(Queue &Q, int e)
|
||||
{
|
||||
if (Q.count >= MAXSIZE) // todo list //利用count判断队是否满
|
||||
printf("队满\n"); // 【有坑,思考】
|
||||
else
|
||||
{
|
||||
// todo list //入队元素,尾指针+1
|
||||
Q.data[Q.rear] = e;
|
||||
Q.rear++;
|
||||
// todo list //更新count值
|
||||
Q.count++;
|
||||
}
|
||||
}
|
||||
|
||||
// 出队
|
||||
void DelQueue(Queue &Q, int &e)
|
||||
{
|
||||
if (Q.count == 0) // todo list //利用count判断队是否空
|
||||
printf("队空\n");
|
||||
else
|
||||
{
|
||||
// todo list //出队元素,头指针+1
|
||||
e = Q.data[Q.front];
|
||||
Q.front++;
|
||||
// todo list //更新count值
|
||||
Q.count--;
|
||||
printf("出队元素为:%d\n", e);
|
||||
}
|
||||
}
|
||||
|
||||
// 判断队空
|
||||
void IsNull(Queue Q)
|
||||
{
|
||||
if (Q.count == 0) // todo list //利用count判断队是否空
|
||||
printf("队空\n");
|
||||
else
|
||||
printf("队不空\n");
|
||||
}
|
||||
|
||||
// 显示整个队列
|
||||
void Display(Queue Q)
|
||||
{
|
||||
while (Q.count > 0)
|
||||
{
|
||||
printf("%3d,", Q.data[Q.front]);
|
||||
// todo list //头指针依次往后移动
|
||||
Q.front++;
|
||||
// todo list //更新count值
|
||||
Q.count--;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
Queue Q;
|
||||
printf("------------------------------------\n");
|
||||
printf("1.初始化队列\n");
|
||||
printf("2.判断队列是否为空\n");
|
||||
printf("3.入队\n");
|
||||
printf("4.出队\n");
|
||||
printf("5.显示整个队列\n");
|
||||
printf("6.退出\n");
|
||||
printf("------------------------------------\n");
|
||||
int sel;
|
||||
while (1)
|
||||
{
|
||||
printf("请输入选项:");
|
||||
scanf("%d", &sel);
|
||||
// getchar();
|
||||
switch (sel)
|
||||
{
|
||||
case 1:
|
||||
Init(Q);
|
||||
printf("链表已经初始化。\n");
|
||||
break;
|
||||
case 2:
|
||||
IsNull(Q);
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
int n, e;
|
||||
printf("请输入入队元素个数:");
|
||||
scanf("%d", &n);
|
||||
printf("请输入需要入队的%d个元素:", n);
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
scanf("%d", &e);
|
||||
EnQueue(Q, e);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
int e;
|
||||
DelQueue(Q, e);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
printf("队列为:");
|
||||
Display(Q);
|
||||
break;
|
||||
case 6:
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user