#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef int ElemType;
typedef int Status;
#define OK 1
#define OVERFLOW -1
typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
} Sqlist;
//构造一个长度为10的线性表
Status InitList_sq(Sqlist &L) {
int x;
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //开辟10*ElemType字节长度的地址空间,并返回首地址
if(!L.elem)exit(OVERFLOW);
printf("创建一个长度为10的线性表\n"); //存储分配失败
for(int i =0; i<LIST_INIT_SIZE; i++) {
printf("请输入第%d个元素:",i+1);
scanf("%d",&x);
L.elem[i]=x;
}
L.length=10; //空表长度为10
L.listsize=LIST_INIT_SIZE*sizeof(ElemType); //初始存储容量
return OK;
}
//删除
void InsertList(Sqlist *L) {
int i,j,k,n=L->length;
for (i = 0; i < n; i++) {//每次都是和i的下一个元素比较比较到最后一个元素
for (j = i + 1; j < n; j++) {//下个元素的值和当前的元素值相等
if (L->elem[i] == L->elem[j]) {
for (k = j; k < n - 1; ++k) {
L->elem[k] = L->elem[k + 1];//把下下一个元素的值放到的重复的元素下标上,arr[i]就是保留下来的一个值
//即跳过保留下的值把重复的值用下一个值就行填充覆盖
}
n--;//进行完上一次的往前挪的操作进行长度减少
L->length--;//顺序表长度-1
j--;//重新指回上一次元素匹配相等的下标
}
}
}
}
//排序
void sortList(Sqlist L) {
int i,j,t;
for (i=0; i<L.length-1; i++) {
for (j=0; j<9-i; j++)
if(L.elem[j]>L.elem[j+1]) {
t=L.elem[j];
L.elem[j]=L.elem[j+1];
L.elem[j+1]=t;
}
}
}
//输出线性表内容
void printList(Sqlist L) {
int i=0;
while(i<L.length) {
printf("%d\t",L.elem[i]);
i++;
}
}
int main() {
Sqlist L;//定义线性表
InitList_sq(L); //构造一个长度为10的线性表
sortList(L);
InsertList(&L);
printList(L);
return 0;
}
已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值相同的元素。
于 2023-10-14 17:06:52 首次发布