#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Windows.h>
#define MAXSIZE 40
//顺序表结构体
typedef struct
{
int data[MAXSIZE]; //存放数据的数组
int size; //顺序表的当前长度
}SeqList;
//初始化
void init_SeqList(SeqList* list)
{
for (int i = 0; i < MAXSIZE; i++)
{
list->data[i] = 0;
}
list->size = 0;
}
//创建顺序表
void create_SeqList(SeqList* list)
{
int len;
printf("请输入要创建的顺序表的长度:");
scanf_s("%d", &len);
printf("请输入数据到顺序表:\n");
for (int i = 0; i < len; i++)
{
scanf_s("%d", &list->data[i]);
list->size++;
}
}
void bubbleSort_SeqList(SeqList* list)
{
for (int i = 0; i < list->size - 1; i++)
{
for (int j = 0; j < list->size - 1 - i; j++)
{
if (list->data[j] > list->data[j + 1])
{
int temp = list->data[j];
list->data[j] = list->data[j + 1];
list->data[j + 1] = temp;
}
}
}
}
//删除有序顺序表中所有相同的元素使其数据元素均不同
void deleteSameValueFromSeqList(SeqList* list)
{
int num = 0;
for (int i = 0; i < list->size; i++)
{
if (list->data[i] == list->data[i + 1])//从前往后每两个元素判断是否相等,若相等计数变量num值+1
{
num++;
}
else
{
list->data[i - num + 1] = list->data[i + 1];//若出现不相等则将当前元素的后一个元素移动到i-num+1的位置
}
}
list->size = list->size - num;//更新顺序表的长度
}
//从无序的顺序表中删除所有相同的元素使其元素均不同算法1
//void deleteSameValueFromSeqList1(SeqList* list)
//{
// for (int i = 0; i < list->size; i++)
// {
// for (int j = i + 1; j < list->size; j++)
// {
//
// if (list->data[i] == list->data[j])
// {
//
// for (int k = j; k < list->size; k++)
// {
// list->data[k] = list->data[k + 1];
// }
// j = j - 1;
// list->size--;
// }
// }
// }
//}
//从无序的顺序表中删除所有相同的元素使其元素均不同算法2
void deleteSameValueFromSeqList1(SeqList* list)
{
int num = 0;
for (int i = 0; i < list->size; i++)
{
num = 0;//每次执行比较时num值重新赋值为0
for (int j = i + 1; j < list->size; j++)
{
if (list->data[i] == list->data[j])
{
num++;
}
else
{
list->data[j - num] = list->data[j];//元素的移动
}
}
list->size = list->size - num;
}
}
//打印
void printf_SeqList(SeqList* list)
{
for (int i = 0; i < list->size; i++)
{
printf("%d ", list->data[i]);
}
printf("\n");
}
int main(void)
{
SeqList list;
init_SeqList(&list);
create_SeqList(&list);
printf("初始顺序表为:\n");
printf_SeqList(&list);
bubbleSort_SeqList(&list);
printf("排序后的顺序表为:\n");
printf_SeqList(&list);
deleteSameValueFromSeqList(&list);
printf("删除有序顺序表中所有相同元素后的其数据元素均不同的顺序表为:\n");
printf_SeqList(&list);
printf("---------------------------------------------------------------------\n");
init_SeqList(&list);
create_SeqList(&list);
printf("初始顺序表为:\n");
printf_SeqList(&list);
deleteSameValueFromSeqList1(&list);
printf("删除无序顺序表中所有相同元素后的其数据元素均不同的顺序表为:\n");
printf_SeqList(&list);
system("pause");
return EXIT_SUCCESS;
}
王道数据结构顺序表算法题第六题
最新推荐文章于 2023-05-06 15:19:55 发布