C++实现顺序表的基本操作

C++实现顺序表的基本操作

为了对数据结构线性表中的顺序表进行练习,我写了一段可以实现顺序表创建、插入、删除、排序、打印等基本操作的代码。

#include<iostream>
#include<algorithm>
using namespace std;
#define MAXSIZE 1000 
#define OVERFLOW -2
#define ERROR 1
typedef int ElemType;
typedef int Status;

//顺序表的建立:定义了一个名为SqList的结构体 
 typedef struct{
 	ElemType *elem;
// 	存储空间的基地址
int length;
//当前长度 
 }SqList;
 
// 顺序表的初始化
void InitList(SqList &L){
	L.elem = new ElemType[MAXSIZE];
//	构造一个新的顺序表L 并为之分配大小为MAXSIZE的空间
if(L.elem == NULL){
	cout<<"存储空间分配失败!"<<endl;
	 exit(OVERFLOW);
}
// 存储空间分配失败退出
L.length = 0;
cout<<"顺序表初始化完成"<<endl; 
} 

//顺序表读入值
void Create(SqList &L,int n,ElemType e){
	for(int i = 0;i<n;i++){
		ElemType e;
		cin>>e;
		L.elem[i] = e;
		L.length++;
	}
} 

//顺序表插入值
int Insert(SqList &L,int i,ElemType e){
	cout<<"请输入要插入的元素及其插的位置"<<endl;
    cin>>e>>i;
    
	if((i<1)||(i>L.length+1))
{
		cout<<"插入地址不合法"<<endl;
	return ERROR;
}
 
    if(L.length == MAXSIZE)
    {
    	cout<<"存储空间已满"<<endl;
		return ERROR;
	} 
    
    for(int j = L.length-1;j>=i-1;j--){
    	L.elem[j+1] = L.elem[j];
	}
//	以上是从后比较的方法 可以边比较边移动
	L.elem[i-1] = e;
    ++L.length;
} 

int Delete(SqList &L,int i){
	cout<<"请输入要删除的元素的位置"<<endl;
	cin>>i;
	
	if((i<1)||(i>L.length))
	{
		cout<<"删除地址不合法"<<endl;
		return ERROR;
	}
	 
	for(int j = i;j<=L.length;j++){
		L.elem[j-1] = L.elem[j];
	}
	--L.length;
}

int Print(SqList L)
{
    if (L.length == 0)
    {
        return 1;
    }
    for (int k = 0; k < L.length; k++)
    {
    	if(k == L.length-1)
    	{
    		cout<<L.elem[k];
		}
		else{
			cout<<L.elem[k]<<' ';
		}
    }
}

void Sort(SqList L){
	sort(L.elem , L.elem + L.length);
} 


int main(){
	int n , x;
	cout<<"请输入n值"<<endl;
	cin>>n;
//	输入数组的长度n
 
    SqList L;
	ElemType e;
//	在主函数中进行声明
    InitList(L);
//    顺序表的初始化 
 loop:
	cout<<"请选择您想进行的操作"<<endl;
	cout<<"0.给顺序表读入值"<<endl;
	cout<<"1.给顺序表插入值"<<endl;
	cout<<"2.给顺序表删除值"<<endl;
	cout<<"3.给顺序表排序"<<endl;
	cout<<"4.输出顺序表"<<endl;
	
	cin>>x;
	
	switch(x){
		case 0:{
			cout<<"请输入数组的各个元素"<<endl;
			Create(L , n , e);
			cout<<"退出请按1,输入其他数字返回上级清单"<<endl;
			int p;
			cin>>p;
			if(p == 1){
			return 0;
			}
			else{
			goto loop;	
			} 	
		break;
		}
		
		case 1:{
			int i;
			Insert(L , i , e);
			cout<<"插入之后的数组"<<endl;
			Print(L);
			cout<<"退出请按1,输入其他数字返回上级清单"<<endl;
			int p;
			cin>>p;
			if(p == 1){
		    return 0;
			}
			else{
			goto loop;	
			} 	
		break;
		}
		
		case 2:{
			int i;
			Delete(L , i);
			cout<<"删除之后的数组:"<<endl;
			Print(L);
		cout<<"退出请按1,输入其他数字返回上级清单"<<endl;
			int p;
			cin>>p;
			if(p == 1){
			return 0; 
			}
			else{
			goto loop;	
			} 	
		break;
		}
		
		case 3:{
		    Sort(L);
			Print(L);
			cout<<"退出请按1,输入其他数字返回上级清单"<<endl;
			int p;
			cin>>p;
			if(p == 1){
			return 0;
			}
			else{
			goto loop;	
			} 	
			break;
		}
		
		case 4:{
			Print(L);
		cout<<"退出请按1,输入其他数字返回上级清单"<<endl;
			int p;
			cin>>p;
			if(p == 1){
			return 0;
			}
			else{
			goto loop;	
			} 	
		break;
		}
		
		default : {
		cout<<"请输入正确的数字!"<<endl;
		goto loop;
			break;
		}
	}
	return 0;  
}

  • 21
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以为你介绍一下用C语言实现顺序基本操作的方法:首先,你需要编写一个函数来初始化顺序,这样才能确保顺序的大小正确;接着,你可以实现插入、删除、查找以及更新操作;最后,你可以创建一个函数来遍历顺序,以打印出中的所有元素。 ### 回答2: 顺序是一种线性数据结构,可以通过数组来实现。在C语言中,可以使用结构体来定义顺序,并编写相应的基本操作函数。 首先,我们可以定义一个结构体来顺序,其中包含一个指向数组的指针和记录当前线性长度的变量。例如: ``` #define MAX_SIZE 100 typedef struct{ int* data; int length; } SeqList; ``` 接下来,我们可以实现一些基本操作函数,包括初始化顺序、插入元素、删除元素、查找元素和打印顺序等。 1. 初始化顺序 ```c void init(SeqList* list){ list->data = (int*)malloc(MAX_SIZE * sizeof(int)); list->length = 0; } ``` 2. 插入元素 ```c void insert(SeqList* list, int element, int position){ if(position < 0 || position > list->length){ printf("插入位置错误"); return; } if(list->length == MAX_SIZE){ printf("顺序已满"); return; } for(int i = list->length; i > position; i--){ list->data[i] = list->data[i - 1]; } list->data[position] = element; list->length++; } ``` 3. 删除元素 ```c void remove(SeqList* list, int position){ if(position < 0 || position >= list->length){ printf("删除位置错误"); return; } for(int i = position + 1; i < list->length; i++){ list->data[i - 1] = list->data[i]; } list->length--; } ``` 4. 查找元素 ```c int search(SeqList* list, int element){ for(int i = 0; i < list->length; i++){ if(list->data[i] == element){ return i; } } return -1; } ``` 5. 打印顺序 ```c void print(SeqList* list){ for(int i = 0; i < list->length; i++){ printf("%d ", list->data[i]); } printf("\n"); } ``` 通过以上的操作函数,我们就可以使用C语言实现顺序基本操作了。使用这些操作函数,可以方便地对顺序进行插入、删除、查找和打印等操作。 ### 回答3: 顺序是一种线性的存储结构,它的特点是元素在存储空间中是连续地存放的。以下是用C语言实现顺序基本操作的步骤: 1. 定义顺序的结构体 首先要定义一个结构体来顺序,结构体中包括存放元素的数组和当前元素个数等信息。 ```c #define MAX_SIZE 100 // 顺序的最大容量 typedef struct { int data[MAX_SIZE]; // 存放元素的数组 int length; // 当前元素个数 } SeqList; ``` 2. 初始化顺序 定义一个初始化顺序的函数,将顺序的长度初始化为0。 ```c void initSeqList(SeqList *list) { list->length = 0; } ``` 3. 插入元素 定义一个插入元素的函数,根据位置和元素的值将元素插入到顺序中。 ```c int insertSeqList(SeqList *list, int pos, int value) { if (pos < 1 || pos > list->length + 1) { return 0; // 插入位置非法 } if (list->length >= MAX_SIZE) { return -1; // 顺序已满,无法插入新元素 } for (int i = list->length; i >= pos; i--) { list->data[i] = list->data[i-1]; // 元素后移 } list->data[pos-1] = value; // 在指定位置插入元素 list->length++; // 元素个数加1 return 1; // 插入成功 } ``` 4. 删除元素 定义一个删除元素的函数,根据位置删除顺序中的元素。 ```c int deleteSeqList(SeqList *list, int pos) { if (pos < 1 || pos > list->length) { return 0; // 删除位置非法 } for (int i = pos - 1; i < list->length-1; i++) { list->data[i] = list->data[i+1]; // 元素前移 } list->length--; // 元素个数减1 return 1; // 删除成功 } ``` 5. 查找元素 定义一个查找元素的函数,根据元素的值查找顺序中是否存在该元素,并返回其位置。 ```c int searchSeqList(SeqList *list, int value) { for (int i = 0; i < list->length; i++) { if (list->data[i] == value) { return i+1; // 返回元素位置 } } return 0; // 未找到该元素 } ``` 以上就是用C语言实现顺序基本操作的步骤。通过这些函数,我们可以实现顺序的初始化、插入、删除和查找等操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值