fix(datastructure.test1): 修复中文乱码

This commit is contained in:
2025-11-28 14:24:13 +08:00
parent 3b2d630697
commit f3123ae31f
2 changed files with 130 additions and 112 deletions

2
DataStructure/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
**/*.exe
**/*.pdb

View File

@@ -4,176 +4,191 @@
typedef struct LNode
{
int data; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct LNode *next; // ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} LNode, *LinkList; // LinkListΪָ<EFBFBD><EFBFBD>LNode<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList; // LinkList为指向LNode类型的指针类型
void chushihua(LinkList &L, LinkList &M, LinkList &N, LinkList &H) // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><EFBFBD>M<EFBFBD><EFBFBD>N<EFBFBD><EFBFBD>H
void chushihua(LinkList &L, LinkList &M, LinkList &N, LinkList &H) // 初始化四个链表L、M、N、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>
// 1.初始化链表将各链表头节点的next设为NULL
L->next = NULL;
M->next = NULL;
N->next = NULL;
H->next = NULL;
printf("链表初始化完成\n");
}
void Emp(LinkList &L) // <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>ձ<EFBFBD>
void Emp(LinkList &L) // 判断链表L是否为空表
{
// if (//todo list)
// 2.判断链表是否为空头节点的next是否为NULL
if (L->next == NULL)
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>\n");
printf("链表为空表。\n");
else
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǿձ<EFBFBD><EFBFBD><EFBFBD>\n");
printf("链表为非空表。\n");
}
void Length(LinkList L)
{ // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>
LNode *p; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
p = L->next; // pָ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ԫ<EFBFBD><D4AA><EFBFBD>)
{ // 求表长返回L中数据元素个数
LNode *p; // 申请临时变量p
p = L->next; // p指向第一个结点(首元结点)
int length = 0;
// todo list //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
// 3.遍历链表统计节点数量
while (p != NULL)
{
length++;
p = p->next;
}
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\n", length);
printf("链表长度为:%d\n", length);
}
// <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
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>
// 1、建立递增有序链表向链表L中插入n个整数插入时保持链表的有序性从小到大
void charu_1(LinkList &L, int n)
{
LNode *q, *p;
for (int i = 1; i <= n; i++)
{
p = L; // <EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>L
q = (LinkList)malloc(sizeof(LNode)); // Ϊ<EFBFBD>µĽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<EFBFBD><EFBFBD>data<EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD>
q->next = NULL; // <EFBFBD><EFBFBD><EFBFBD>½ڵ<EFBFBD><EFBFBD>nextָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNULL<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>½ڵ㵱ǰ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>κνڵ㡣
p = L; // 在每次循环开始时将p指向链表的头节点L
q = (LinkList)malloc(sizeof(LNode)); // 为新的节点分配内存并将q指向这块内存
printf("请输入第%d个整数数的值", i);
scanf("%d", &q->data); // 将输入的值存储在q指向的节点的data字段中
q->next = NULL; // 将新节点的next指针设置为NULL表示新节点当前不指向任何节点。
// <20><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>λ<EFBFBD><CEBB>
if (p->next == NULL) // 如果链表为空,直接插入
{
// 4.空链表时直接插入新节点
p->next = q;
}
else // 非空链表,查找插入位置
{
while (p->next != NULL && p->next->data < q->data)
{
p = p->next; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>
// 5.移动p指针找到插入位置
p = p->next;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½ڵ<EFBFBD>
// 6.插入新节点
q->next = p->next;
p->next = q;
}
}
}
// 2<EFBFBD><EFBFBD><EFBFBD>ֽ⣺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>е<EFBFBD>Ԫ<EFBFBD>ط<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ǡ<EFBFBD>
// 显示链表L的所有元素
void xianshi(LinkList &L)
{
LNode *p; // 申请临时变量p
p = L;
// 7.判断链表是否为空
if (p->next == NULL)
{
printf("链表为空");
}
while (p->next != NULL)
{
printf("%4d", p->next->data);
p = p->next;
}
printf("\n");
}
// 2、分解将链表L中的元素分为奇数和偶数两个链表M和N并分别显示它们。
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>
// 8.移动p指针到下一个节点
temp = p->next;
p->next = temp->next; // 提前断开原链表连接,防止遍历混乱
if (temp->data % 2 == 0) // ż<EFBFBD><EFBFBD>Ԫ<EFBFBD>أ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>M
if (temp->data % 2 == 0) // 偶数元素,前插法插入偶数链表
{
o = (LinkList)malloc(sizeof(LNode));
o->data = temp->data;
o->next = M->next;
M->next = o;
o = temp;
// 9.前插法插入偶数链表
o->next = N->next;
N->next = o;
}
else // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>أ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>N
else // 奇数元素,前插法插入奇数链表
{
j = (LinkList)malloc(sizeof(LNode));
j->data = temp->data;
j->next = N->next;
N->next = j;
j = temp;
// 10.前插法插入奇数链表
j->next = M->next;
M->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>
printf("奇表为:");
xianshi(M);
printf("偶表为:");
xianshi(N);
}
// 3<EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><EFBFBD>ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>ϲ<EFBFBD>Ϊһ<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>
// 3、合并一个递减链表将奇数链表J和偶数链表O合并为一个新的链表H合并时保持元素的有序性。
void hebiao(LinkList &J, LinkList &O, LinkList &H)
{
LNode *p, *q, *t, *m;
p = J->next; // ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD>
q = O->next;
m = H; // m<EFBFBD><EFBFBD><EFBFBD>βָ<EFBFBD><EFBFBD><EFBFBD>ʼָ<EFBFBD><EFBFBD>ͷ<EFBFBD>ڵ<EFBFBD>
LNode *p, *q, *t;
p = J->next; // 指向奇数链表第一个元素
q = O->next; // 指向偶数链表第一个元素
LNode *m = H; // 合并链表的尾指针
// <20><><EFBFBD><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>
while (p != NULL && q != NULL) // 奇和偶表都有数据结点
{
if (p->data > q->data) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (p->data > q->data) // 奇数大于偶数,取奇数
{
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>
// 11.尾插法插入合并链表
m->next = t;
m = t;
p = p->next; // 移动奇数链表指针
}
else // ȡż<EFBFBD><EFBFBD>
else // 偶数大于等于奇数,取偶数
{
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;
// 12.尾插法插入合并链表
m->next = t;
m = t;
p = p->next;
q = q->next; // 移动偶数链表指针
}
}
// <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ż<EFBFBD><C5BC><EFBFBD>ڵ<EFBFBD>
if (p == NULL) // 奇数链表先遍历完成,处理剩余偶数
{
while (q != NULL)
{
t = (LinkList)malloc(sizeof(LNode));
t->data = q->data;
t->next = NULL;
// 13.尾插剩余偶数节点
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
q = q->next;
}
}
printf("<EFBFBD>Ӵ<EFBFBD>С<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>");
xianshi(H); // <20><>ʾ<EFBFBD>ϱ<EFBFBD>H
if (q == NULL) // 偶数链表先遍历完成,处理剩余奇数
{
while (p != NULL)
{
t = (LinkList)malloc(sizeof(LNode));
t->data = p->data;
t->next = NULL;
// 14.尾插剩余奇数节点
m->next = t;
m = t;
p = p->next;
}
}
printf("从大到小的单链表为:");
xianshi(H); // 显示合表H
}
int main()
{
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷָ<EFBFBD><EFBFBD>ֱ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>
// 生成新结点作为头结点,用头指针分别指向各头结点
LinkList head = (LinkList)malloc(sizeof(LNode));
LinkList ji = (LinkList)malloc(sizeof(LNode));
LinkList ou = (LinkList)malloc(sizeof(LNode));
@@ -181,20 +196,20 @@ int main()
int choose = -1, n;
printf("*********************************************\n");
printf("********** ʵ<EFBFBD><EFBFBD>һ *******\n");
printf("********** 实验一 *******\n");
printf("*********************************************\n");
printf("********** 1.<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
printf("********** 2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
printf("********** 3.<EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD><><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
printf("********** 4.<EFBFBD>ϲ<EFBFBD><EFBFBD>ɵݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
printf("********** 5.<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
printf("********** 6.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *******\n");
printf("********** 7.<EFBFBD>жϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><EFBFBD> *******\n");
printf("********** 0.<EFBFBD>˳<EFBFBD> *******\n");
printf("********** 1.初始化单链表 *******\n");
printf("********** 2.建立递增链表 *******\n");
printf("********** 3.分成奇/偶两链表 *******\n");
printf("********** 4.合并成递减单链表 *******\n");
printf("********** 5.显示建立的(递增)单链表整体 *******\n");
printf("********** 6.求单链表长度 *******\n");
printf("********** 7.判断单链表是否为空 *******\n");
printf("********** 0.退出 *******\n");
printf("*********************************************\n");
while (choose)
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>\n");
printf("请输入你的选择项:\n");
scanf("%d", &choose);
switch (choose)
{
@@ -202,12 +217,12 @@ int main()
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");
printf("请输入你要插入正整数的个数:\n");
scanf("%d", &n);
charu_1(head, n);
break;
case 3:
fenbiao(head, ou, ji);
fenbiao(head, ji, ou);
break;
case 4:
hebiao(ji, ou, he);
@@ -226,4 +241,5 @@ int main()
break;
}
}
return 0;
}