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 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 数据结构(C语言)——线性表(1)顺序表 -> 正文阅读

[C++知识库]数据结构(C语言)——线性表(1)顺序表

目录

顺序表(静态分配)

顺序表(动态分配)


顺序表(静态分配)

#include<stdio.h>
#include <stdlib.h>

//静态分配
#define Maxsize 10
typedef struct {
    int data[Maxsize];
    int length;
}SqList;


//基本操作
//1.初始化一个顺序表---静态表
void InitList(SqList &L);
//2.插入操作---在第i个位置插入元素 
bool ListInsert(SqList &L, int i, int e); 
//3.删除操作---删除第i个元素 
bool ListDelete(SqList &L, int i, int &e);
//4.按位查找
int GetElem(SqList L, int i); 
//5.按值查找
int LocateElem(SqList L, int e); 
//6.遍历输出 
void PrintList(SqList &L); 
 
//初始化一个顺序表---静态表
void InitList(SqList &L) {
    //将所有数据元素初始化为0 可以省略 
//    for(int i=0; i<L.length; i++){
//        L.data[i] = 0;
//    }
    //顺序表初始长度设为0
    L.length = 0;
}

//插入操作---在第i个位置插入元素 
bool ListInsert(SqList &L, int i, int e) {  //位序-数组下标=1 
	if(i<1 || i>L.length+1){         //i无效 
		return false;
	}
	if(L.length>=Maxsize){          //数组容量不足 
		return false;
	}
	
	for(int j=L.length; j>=i; j--){   //将第i个元素及之后的元素后移一位 
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;                 //在位序i(下标i-1)放e 
	L.length++;                      //长度 + 1
	return true; 
} 

//删除操作---删除第i个元素 
bool ListDelete(SqList &L, int i, int &e) { 
	if(i<1 || i>L.length+1){         //i无效 
		return false;
	}
	e = L.data[i-1]; 
	for(int j=i; j<L.length; j++){   //将第i个位置之后的元素前移一位 
		L.data[j-1] = L.data[j];
	}
	L.length--;                      //长度 - 1
	return true; 
}

//按位查找
int GetElem(SqList L, int i) {
	return L.data[i-1];
} 

//按值查找
int LocateElem(SqList L, int e) {
	for(int i=0; i<L.length; i++){
		if(L.data[i] == e){
			return i+1;  //返回位序 
		} 
	} 
	return 0; 
} 

//遍历输出 
void PrintList(SqList &L) {
    for(int i=0; i<L.length; i++){             //用L.length遍历访问 
        printf("data[%d]=%d\n", i, L.data[i]);
    }
}

int main() {
    //**************************声明动态顺序表 **************************
	SqList L;  
	//**************************初始化***********************************
    InitList(L);
    //**************************给数组赋一些初值*************************
    for(int i=0; i<5; i++){  
        L.data[i] = i+1;
        L.length++;
    }
	//**************************在位序3插入10****************************
    if(ListInsert(L, 3, 10)) {
    	printf("插入成功!\n"); 
	} else{
		printf("您输入的位置i无效,或当前存储空间已满,不能插入!\n");
	}
    PrintList(L);     //遍历L 
    //*************************删除位序4对应的元素************************
    int e = -1;
    if(ListDelete(L, 4, e)){
    	printf("已删除第4个元素,删除元素值为=%d\n", e); 
	}else{
		printf("您输入的位置i无效!\n");
	}
	//************************查找****************************************
	int num_Get = 0;
	printf("请输入您想查询的位序:"); 
	scanf("%d", &num_Get);
	printf("第%d个元素:%d\n", num_Get, GetElem(L, num_Get)); //按位查找
	
	printf("请输入您想查询的数字:");
	scanf("%d", &num_Get);
	int num_Locate = LocateElem(L, num_Get); //按值查找	 
	if(num_Locate != 0){
		printf("数字%d所在位序:%d\n", num_Get, num_Locate);
	}else{
		printf("未找到该数字哦!");
	}
	
    
    return 0;
    system("pause");
}

顺序表(动态分配)

#include<stdio.h>
#include <stdlib.h>

//动态分配 
#define InitSize 10  //默认最大长度 
typedef struct {
    int *data;    //指示动态分配数组的指针 
    int MaxSize;  //顺序表的最大容量 
    int length;   //顺序表当前的长度 
}SeqList;


//基本操作
//1.初始化一个顺序表---动态表
void InitList(SeqList &L);
//2.动态增加数组的长度---动态表
void IncreaseSize(SeqList &L, int len);
//3.插入操作---在第i个位置插入元素 
bool ListInsert(SeqList &L, int i, int e); 
//4.删除操作---删除第i个元素 
bool ListDelete(SeqList &L, int i, int &e);
//5.按位查找
int GetElem(SeqList L, int i); 
//6.按值查找
int LocateElem(SeqList L, int e); 
//7.遍历输出 
void PrintList(SeqList &L); 


//初始化一个顺序表---动态表
void InitList(SeqList &L) {
	//用malloc申请一片连续的存储空间 
	L.data = (int *)malloc(InitSize*sizeof(int)); 
	L.length = 0;
	L.MaxSize = InitSize; 
}

//动态增加数组的长度---动态表
void IncreaseSize(SeqList &L, int len) {
	int *p = L.data;
	L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));//len 要增加的长度
	for(int i=0; i<L.length; i++){
		L.data[i] = p[i];           //将数据复制到新区域 
	} 
	L.MaxSize = L.MaxSize + len;    //顺序表的长度增加len 
	free(p);                        //释放掉原来的内存空间 
} 


//插入操作---在第i个位置插入元素 
bool ListInsert(SeqList &L, int i, int e) {  //位序-数组下标=1 
	if(i<1 || i>L.length+1){         //i无效 
		return false;
	}
	if(L.length>=L.MaxSize){          //数组容量不足 
		return false;
	}
	
	for(int j=L.length; j>=i; j--){   //将第i个元素及之后的元素后移一位 
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;                 //在位序i(下标i-1)放e 
	L.length++;                      //长度 + 1
	return true; 
} 


//删除操作---删除第i个元素 
bool ListDelete(SeqList &L, int i, int &e) { 
	if(i<1 || i>L.length+1){         //i无效 
		return false;
	}
	e = L.data[i-1]; 
	for(int j=i; j<L.length; j++){   //将第i个位置之后的元素前移一位 
		L.data[j-1] = L.data[j];
	}
	L.length--;                      //长度 - 1
	return true; 
}

//按位查找
int GetElem(SeqList L, int i) {
	return L.data[i-1];
}

//按值查找 
int LocateElem(SeqList L, int e) {
	for(int i=0; i<L.length; i++){
		if(L.data[i] == e){
			return i+1;  //返回位序 
		} 
	} 
	return 0; 
} 


//遍历输出 
void PrintList(SeqList &L) {
    for(int i=0; i<L.length; i++){
        printf("data[%d]=%d\n", i, L.data[i]);
    }
}

int main() {
	//**************************声明动态顺序表 **************************
	SeqList L;  
	//**************************初始化***********************************
    InitList(L);
    //**************************给数组赋一些初值*************************
    for(int i=0; i<5; i++){  
        L.data[i] = i+1;
        L.length++;
    }
    //**************************增加数组长度*****************************
	printf("L.MaxSize=%d\n",L.MaxSize);
	IncreaseSize(L, 5);
	printf("L.MaxSize=%d\n",L.MaxSize); 
	//**************************在位序3插入10****************************
    if(ListInsert(L, 3, 10)) {
    	printf("插入成功!\n"); 
	} else{
		printf("您输入的位置i无效,或当前存储空间已满,不能插入!\n");
	}
    PrintList(L);     //遍历L 
    //*************************删除位序4对应的元素************************
    int e = -1;
    if(ListDelete(L, 4, e)){
    	printf("已删除第4个元素,删除元素值为=%d\n", e); 
	}else{
		printf("您输入的位置i无效!\n");
	}
	//************************查找****************************************
	int num_Get = 0;
	printf("请输入您想查询的位序:"); 
	scanf("%d", &num_Get);
	printf("第%d个元素:%d\n", num_Get, GetElem(L, num_Get)); //按位查找
	
	printf("请输入您想查询的数字:");
	scanf("%d", &num_Get);
	int num_Locate = LocateElem(L, num_Get); //按值查找	 
	if(num_Locate != 0){
		printf("数字%d所在位序:%d\n", num_Get, num_Locate);
	}else{
		printf("未找到该数字哦!");
	}
	
    return 0;
    system("pause");
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:21:43  更:2021-08-22 13:24:08 
 
开发: 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年12日历 -2024/12/27 4:40:13-

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