ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

顺序表的增删查

2021-08-04 16:31:55  阅读:144  来源: 互联网

标签:顺序 return int ++ length Sqlist 增删 data


1.定义结构体

#define Maxsize 50  
typedef int ElemType;

typedef struct {
	ElemType data[Maxsize];  //顺序表的最大长度为Maxsize
	int length;             //顺序表的当前长度
}Sqlist;

2.初始化顺序表

memset():在一段内存块中填充某个给定的值,在这里,用0初始化内存单元。

使用memset()要引入头文件:#include<string.h>


void initlsit(Sqlist &L) {
	memset(L.data, 0, sizeof(L));
	L.length = 0;
}

3.顺序表的插入 

bool ListInsert(Sqlist &L, int i, ElemType e) {
	if (i<1 || i>L.length + 1)  //判断i的位置是否合法
		return false;
	if (L.length == Maxsize)  //判断顺序表是否已经达到最大长度
		return false;
	for (int j = i - 1; j < L.length; j++) {
		L.data[j] = L.data[j + 1];
	}
	L.data[i - 1] = e;
	L.length++;
	return true;
}

4.顺序表的删除

bool ListDelete(Sqlist& L, int i, ElemType &e) { //&,用来返回e的地址
	if (i<1 || i>L.length)//判断i的位置是否合法
		return false;
	if (L.length == 0)//判断顺序表的长度是否为0
		return false;
	e = L.data[i - 1];  
	for (int j = i - 1; j < L.length-1; j++) {
		L.data[j] = L.data[j + 1];
	}
	L.length--;  //删除一个元素,顺序表的长度减一
	return true;
}

5.找到指定元素的位置

int LocateElem(Sqlist L, ElemType e) {
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] == e)
			return i + 1;
	}
	return 0;
}

6.习题

//1.删除顺序表中具有最小值的元素
int ListDeleteMix(Sqlist& L) {
	if (L.length == 0)
		return 0;
	int mix=L.data[0],t=0;
	for (int i = 0; i < L.length; i++) {
		if (L.data[i] <mix) {
			t = i;
			mix = L.data[i];
		}
		
	}
	L.data[t] = L.data[L.length - 1];
	L.length--;
	return mix;
}
//2.顺序表逆置
void reverse(Sqlist& L) {
	int t = 0;
	for (int i = 0; i < L.length/2; i++) {
		t = L.data[i];
		L.data[i] = L.data[L.length - 1 - i];
		L.data[L.length - 1 - i] = t;
	}
}
//3.删除值为x的
void ListDeletx(Sqlist& L,ElemType x) {
	int k = 0;
	for (int i = 0; i < L.length; i++) {
		if (L.data[i]!= x) {
			L.data[k] = L.data[i];
			k++;
		}
		
	}
	L.length = k;
}
//4.删除s-t之间的 

bool ListDeletes_t(Sqlist& L, ElemType s, ElemType t) {
	int k = 0;
	if (s >= t||L.length==0)
		return false;
	for (int i = 0; i < L.length; i++) {
		if (L.data[i]<s || L.data[i]>t) {
			L.data[k] = L.data[i];
			k++;
		}
	}
	L.length = k;
}

//6从有序表中删除重复元素
void ListDeleteCF(Sqlist &L) {
	int i,k = 0;
	for (i = 0; i < L.length - 1; i++) {
		if (L.data[i] != L.data[i + 1]) {
			L.data[k] = L.data[i];
			k++;
		}
	}
      if (L.data[i] != L.data[i + 1]) {
		  L.data[k] = L.data[i + 1];
		  k++;
		}
	  L.length = k;
}
//7,合并两个有序表
bool merge(Sqlist L1, Sqlist L2,Sqlist &L3) {
	if (L1.length + L2.length > Maxsize) {
		return false;
	}
	int i = 0, j = 0, k = 0;
	while (i < L1.length && j < L2.length) {
		if (L1.data[i] <= L2.data[j]) {
			L3.data[k] = L1.data[i];
			i++;
			k++;
		}
		else {
			L3.data[k] = L2.data[j];
			j++;
			k++;
		}
	}
	if (i < L1.length) {
		L3.data[k] = L1.data[i];
		k++;
		i++;
	}
	if (j< L2.length) {
		L3.data[k] = L2.data[j];
		k++;
		j++;
	}
	L3.length = k;
	return true;
}

标签:顺序,return,int,++,length,Sqlist,增删,data
来源: https://blog.csdn.net/m0_57490578/article/details/119386802

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有