IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构《顺序表》 -> 正文阅读

[数据结构与算法]数据结构《顺序表》

关于顺序表的插入,查询,删除,清空,非递归归并排序,递归归并排序,位移法删除重复元素,查找法删除重复元素等等基本操作代码,以及关于malloc的动态分配内存的解释,重要解释在代码中:

/*数据结构 线性表->顺序表的插入,查询,删除,清空*/
#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 200000
#define TRUE 1
#define FALSE 0
#define OK 1 
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType; 
typedef int Status; 
typedef struct{
	ElemType *elem;
	int length;
}SqList;
Status InitList(SqList &L){//操作结果构造一个空的线性表 
	L.elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));//malloc是在内存的动态存储区中分配一个长度为size的连续空间,返回值是一个指向所分配的连续存储域的起始地址的指针,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。 
	//if(!L.elem) exit(OVERFLOW); 
	L.length=0;
	if(L.elem==NULL) return ERROR; 
	return OK;
}
void DestroyList(SqList &L){//破坏链表 
	if(L.elem) delete L.elem;//释放存储空间 
}
void ClearList(SqList &L){ L.length=0;}//清空
int ListEmpty(SqList L){if(L.length==0) return 1;return 0;}//判断是否为空 
int ListLength(SqList L){return L.length;}//获取链表长度 
int GetElem(SqList L,int i,ElemType &e){//取第i个元素 
	if(i<1||i>L.length) return ERROR;//判断位置是否合理 ,不合理 返回ERROR 
	e=L.elem[i-1];//注意下标存储位置 
	return OK;
}
int LocateElem(SqList L,ElemType e){//平均查找长度 (n+1)/2 
	for(int i=1;i<=L.length;i++){//也可以用while 
		if(L.elem[i-1]==e) return i;
	}
	return 0;//查找失败返回 0 
}
int PriorElem();//前驱 
int NextElem();//后继 
Status ListInsert(SqList &L,int i,ElemType e){//插入元素 
	if(i<1||i>L.length+1) return ERROR;//判断插入位置是否合理 
	if(L.length>=MAXSIZE) return ERROR;//关于不取>MAXSIZE的问题:我们这里是需要插入一个数,==MAXSIZE的时候已经满了,再插入一个必然爆呀~ 
	for(int j=L.length-1;j>=i-1;j--){
		L.elem[j+1]=L.elem[j];
	}
	L.elem[i-1]=e;
	L.length++;
	return OK;	
}
Status ListDelete(SqList &L,int i){
	if(i<1||i>L.length) return ERROR;
	for(int j=i;j<=L.length-1;j++){//最后一项是L.length-1移动到L.length-2 
		L.elem[j-1]=L.elem[j];
	}
	L.length--;
	return OK;
}
void ListTravel(SqList &L){//遍历 
	for(int i=1;i<=L.length;i++){
		if(i==1) cout<<L.elem[i-1];
		else cout<<" "<<L.elem[i-1];
	} 
	return ; 
}
SqList Merge_Sort(SqList L1,SqList L2){//非递归的归并排序 
	SqList L;
	InitList(L);
	int i=1,j=1;
	while(i<=L1.length&&j<=L2.length){
		if(L1.elem[i-1]<L2.elem[j-1]) ListInsert(L,L.length+1,L1.elem[i-1]),i++;
		else ListInsert(L,L.length+1,L2.elem[j-1]),j++;
	}
	while(i<=L1.length) ListInsert(L,L.length+1,L1.elem[i-1]),i++;
	while(j<=L2.length) ListInsert(L,L.length+1,L2.elem[j-1]),j++;
	return L;
}
/*void merge_sort(int s[],int l,int r){//递归的归并排序(由于数据结构书上没提这个,就用数组模拟了(手动狗头QAQ)) if(l>=r) return ;int mid=l+r>>1;merge_sort(s,l,mid);merge_sort(s,mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r){if(s[i]<=s[j]) temp[k++]=s[i++];else temp[k++]=s[j++];}while(i<=mid) temp[k++]=s[i++];while(j<=r) temp[k++]=s[j++];for(i=l,j=0;i<=r;i++,j++) s[i]=temp[j];}*/
Status ListFind(SqList L,ElemType x){//查找是否表中存在元素x 存在返回1 否则返回0 
	for(int i=1;i<=L.length;i++){
		if(L.elem[i-1]==x) return OK; 
	}
	return ERROR;
}
void ListInsertOnlyOne(SqList &L,ElemType x){//如果表中不存在这个元素就插入 
	if(!ListFind(L,x)) ListInsert(L,L.length+1,x);
}
int ListFindSecondPos(SqList &L){//位移法删除表中重复元素 
	for(int i=0;i<L.length-1;i++){
		for(int j=i+1;j<L.length;j++){
			if(L.elem[i]==L.elem[j]){
				for(int k=j;k<=L.length-2;k++){
					L.elem[k]=L.elem[k+1];
				}
				L.length--;
				j--;
			}
		}
	}
	return 0;
}
int main(){
	int n;
	cin>>n;
	while(n--){
		SqList L;
		InitList(L);
		int m;
		cin>>m;
		for(int i=1;i<=m;i++){
			int x;cin>>x;
			//ListInsertOnlyOne(L,x);
			ListInsert(L,i,x); 
		}
		ListFindSecondPos(L);
		ListTravel(L);
		if(n) cout<<endl;
	} 
	return 0;
} 
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:37:09  更:2021-11-23 12:38:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/30 18:39:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码