删除顺序表中值相同的多余元素

news/2024/5/20 5:47:45 标签: 顺序表, 删除重复元素, O(n)

设计并验证一下算法:设顺序表L中的数据元素为整数且非递增有序,删除其值相同的多余元素,即顺序表L中相同的元素只保留一个,并逆置删除后的顺序表L。

(1)根据键盘输入数据建立顺序表L。

(2)输出顺序表L、删除值相同的多余元素后的顺序表L、逆置的顺序表L。

(3)假设顺序表L长度为n,要求以O(n)的时间复杂度完成对值相同多余元素的删除。

实验代码:

#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100 
typedef int ElemType;
typedef struct{
    ElemType *elem;//存储空间基址
    int length;  //当前长度
}SqList; 
void InitList(SqList *l){ //初始化顺序表 
  l->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  l->length=0;
}
void CreateList(SqList *l){//创建顺序表   
  int data,i=0;
  scanf("%d",&data);
  while(!(data<0)){
  	  l->elem[i++]=data;
  	  l->length++;
  	  scanf("%d",&data);
  }
}
void print(SqList list){//打印顺序表 
	int i=0;
	while(i<list.length){
		printf("%d ",list.elem[i++]);
	}
	printf("\n");
}
void distinc(SqList *l){//去除重复元素
	int *p,*q,*r=l->length+l->elem;
	for(p=l->elem,q=p+1;q<r;q++){
		if(*p!=*q){
		 *(p+1)=*q;
			 p++;
		}else{ 
			l->length--;
		}
	}
}
void swap(ElemType *a,ElemType *b){//交换两个数 
	ElemType temp;
	temp=*a;
	*a=*b;
	*b=temp; 
}
void reverse(SqList l){//逆置顺序表 
	int i;
	for(i=0;i<l.length/2;i++){
		swap(l.elem+i,l.elem+l.length-1-i);
	}
}
int main(){
	while(1){
		SqList L;
		InitList(&L);
		printf("输入正整数:(负数代表结束输入)\n");
		CreateList(&L);
		printf("去除重复元素:");
		distinc(&L);
		print(L);
		reverse(L);
		printf("反转:"); 
		print(L);
	}
	return 0;
}
/*
样例输入:
1 2 3 4 4 4 4 4 5 6 7 7 7 8 -1 
*/ 


运行结果:



http://www.niftyadmin.cn/n/1868063.html

相关文章

一元稀疏多项式计算器

&#xff08;1&#xff09;设Pn(x)和Qn(x)分别为两个一元稀疏多项式&#xff0c;利用单链表存储Pn(x)和Qm(x)。 &#xff08;2&#xff09;从键盘输入一元多项式的信息&#xff0c;建立一元稀疏多项式Pn(x)和Qm(x),并输出。 &#xff08;3&#xff09;实现Pn(x)和Qm(x)相加&…

队列走迷宫

迷宫问题。假设迷宫有m行n列构成&#xff0c;有一个入口和一个出口&#xff0c;入口坐标为&#xff08;1&#xff0c;1&#xff09;&#xff0c;出口坐标为&#xff08;m,n&#xff09;&#xff0c;式设计并验证一下算法&#xff1a;找出一条从入口通往出口的路径&#xff0c;或…

表达式直接求值

实验代码&#xff1a; #include <stdio.h> #include<stdlib.h> #include <malloc.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAX_STACK 100 typedef int SElemType; typedef int Status;typedef struct{SElemType base[MAX_S…

矩阵的快速转置和矩阵加法

1.稀疏矩阵A,B均采用三元组顺序表表示&#xff0c;验证实现矩阵A快速装置算法&#xff0c;并设计&#xff0c;验证矩阵A&#xff0c;B相加得到矩阵C的算法。 &#xff08;1&#xff09;从键盘输入矩阵的行数和列数&#xff0c;随机生成稀疏矩阵。 &#xff08;2&#xff09…

求二叉树 叶节点数 深度 非递归先序遍历 层序遍历 交换左右子树 双孩子节点 单孩子节点

废话不多说&#xff0c;直接上代码 #include <stdio.h> #include <malloc.h> #include<stdlib.h> #include<conio.h> #include<string.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -1 #define INFEASIB…

图深度优先和广度优先遍历

实验目的 1. 深入了解图的逻辑结构特性及其基本操作 2. 了解图的各种存储结构的特点与适用范围&#xff0c;熟练掌握在邻接矩阵和邻接表存储结构上深度优先和广度优先搜索算法的实现 3. 掌握图的应用&#xff0c;如求解图的连通性问题&#xff0c;最小生成树&#xff…

二叉排序树的创建和删除

实验目的 1. 掌握各种查找方法的基本思想、特点及所适应的不同场合。 2. 熟练掌握顺序查找、折半查找、索引查找、二叉排序树查找和哈希表查找算法及其实现。 3. 能用所学的查找方法解决实际问题。 实验预习在实验预习报告上设计&#xff0c;编写实验内容的源程序&#xff0…

eclipse设置成全屏护眼色

1.eclipse代码区设置护眼色。 windows->peferences->General->Editors->Text Editor Appearance color options: 选择Background color&#xff0c;去掉System default 点击color框&#xff0c;进入颜色设置窗口。 2.非代码区护眼色 使用“WinR”组合快捷键打开“…