【数据结构】顺序表

#include <bits/stdc++.h>
using namespace std;
typedef int DataType;
typedef struct SeqList * PSeqList;
struct SeqList{
		int MAXNUM;
		int n;
		int* element;
};

	PSeqList createNullList_seq(int m);//创建空顺序表 
	
	int isNullList_seq(PSeqList palist);//判断线性表是否为空 

	int locate_seq(PSeqList palist, DataType x);//在顺序表中求元素下标 

	int insertPre_seq(PSeqList palist, int p, DataType x);//在palist所指的顺序表中下标为p的元素之前插入元素 

	int insertPost_seq(PSeqList palist, int p, DataType x);//在palist所指的顺序表中下标为p的元素之后插入元素 
	
	int deleteP_seq(PSeqList palist, int p);//删除下标为p的元素 
	
	int deleteV_seq(PSeqList palist, DataType x);//删除值为x的元素 
	
	int show_seq(PSeqList palist);//打印所有元素 
	
	void inversion_seq(PSeqList palist);//置逆表中元素 

int main(){
	
	cout << "创建一个多少大小的顺序表" << endl;
	int m;
	cin >> m;
	PSeqList myList = createNullList_seq(m);
	
	if(isNullList_seq(myList))
		cout << "此时表为空" << endl;
	else cout << "表不为空" << endl;
	
	cout << "开始插入元素" << endl;
	int insertX;
	for(int i = 0;i < m;i ++){
		cin >> insertX;
		insertPre_seq(myList, i, insertX);
	}
	
	if(isNullList_seq(myList))
		cout << "此时表为空" << endl;
	else cout << "表不为空" << endl;
	cout << "输出所有元素" << endl; 
	show_seq(myList);
	
	cout << "删除某个位置的元素" << endl;
	int delP;
	cin >> delP;
	deleteP_seq(myList, delP);
	cout << "输出所有元素" << endl; 
	show_seq(myList);
	
	cout << "还剩" << myList -> n << "个元素" << endl;
	
	cout << "在某个位置后面插入元素" << endl;
	cout << "输入插入下标" << endl;
	int index;
	cin >> index;
	cout << "输入插入元素" << endl;
	cin >> insertX;
	insertPost_seq(myList, index, insertX);
	cout << "输出所有元素" << endl; 
	show_seq(myList);
	
	cout << "置逆顺序表" << endl;
	inversion_seq(myList);
	cout << "输出所有元素" << endl; 
	show_seq(myList);
	
	system("pause");
	return 0;
} 

	PSeqList createNullList_seq(int m){//创建空顺序表 
		PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
		if(palist != NULL){
			palist -> element = (DataType*)malloc(sizeof(DataType) * m);
			if(palist -> element){
				palist -> MAXNUM = m;
				palist -> n = 0;//空表长度为0
				return palist; 
			}
			else free(palist);
		}
		printf("Out of space!!\n");//储存分配失败
		return NULL; 
	}
	
	int isNullList_seq(PSeqList palist){//判断线性表是否为空 
		return(palist -> n == 0);
	}
	
	int locate_seq(PSeqList palist, DataType x){//在顺序表中求元素下标 
		for(int q = 0;q < palist -> n;q ++){
			if(palist -> element[q] == x)
				return q;
		}
		return -1;
	}
	
	int insertPre_seq(PSeqList palist, int p, DataType x){//在palist所指的顺序表中下标为p的元素之前插入元素 
		if(palist -> n >= palist -> MAXNUM){//溢出 
			DataType * pos1 = (DataType *)malloc(sizeof(DataType) * palist -> MAXNUM * 2);//申请两倍的空间补救 
			if(pos1 == NULL){
				printf("Overflow!\n");
				return 0;
			}
			for(int q = 0;q < palist -> MAXNUM;q++){
				pos1[q] = palist -> element[q];
			}
			free(palist -> element);
			palist -> element = pos1;
			palist -> MAXNUM *= 2;
		}
		if(p < 0|| p > palist -> n){//不存在下标为p的元素 
			printf("Not exist!\n");
		}
		for(int q = palist -> n - 1;q >= p;q --){//插入位置及以后的元素均后移一个位置 
			palist -> element[q+1] = palist -> element[q];
		}
		palist -> element[p] = x;//插入元素 
		palist -> n ++;//元素个数加1 
		return 1;
	}
	
	int insertPost_seq(PSeqList palist, int p, DataType x){//在palist所指的顺序表中下标为p的元素之后插入元素 
		if(palist -> n >= palist -> MAXNUM){//溢出 
			DataType * pos1 = (DataType *)malloc(sizeof(DataType) * palist -> MAXNUM * 2);//申请两倍的空间补救 
			if(pos1 == NULL){
				printf("Overflow!\n");
				return 0;
			}
			for(int q = 0;q < palist -> MAXNUM;q++){
				pos1[q] = palist -> element[q];
			}
			free(palist -> element);
			palist -> element = pos1;
			palist -> MAXNUM *= 2;
		}
		if(p < 0|| p > palist -> n){//不存在下标为p的元素 
			printf("Not exist!\n");
		}
		for(int q = palist -> n - 1;q >= p + 1;q --){//插入位置后一位及以后的元素均后移一个位置 
			palist -> element[q+1] = palist -> element[q];
		}
		palist -> element[p+1] = x;//插入元素 
		palist -> n ++;//元素个数加1 
		return 1;
	}
	
	int deleteP_seq(PSeqList palist, int p){//删除下标为p的元素 
		if(p < 0 || p > palist -> n - 1){//不存在下标为p的元素 
			printf("Not exist!\n");
			return 0;
		}
		for(int q = p;q < palist -> n-1;q ++){//被删除之后的元素均迁移一个位置 
			palist -> element[q] = palist -> element[q+1];
		}
		palist -> n --; 
	}
	
	int deleteV_seq(PSeqList palist, DataType x){//删除值为x的元素
		int p = locate_seq(palist, x);
		if(p == -1){
			printf("Not exsit!\n");
		}
		else deleteP_seq(palist, p);
	}
	
	int show_seq(PSeqList palist){//打印表中所有元素 
		if(isNullList_seq(palist))
			printf("List is NULL!\n");
		else for(int i = 0;i < palist -> n;i ++){
			printf("%d ", palist -> element[i]);
		}
		printf("\n");
		return 1;
	}
	
	void inversion_seq(PSeqList palist){//置逆表中元素 
		if(palist -> n == 0 || palist -> n == 1)
			return;
		else{
			int count = palist -> n / 2;
			for(int  i = 0;i < count;i ++){
				DataType t = palist -> element[i];
				palist -> element[i] = palist -> element[palist -> n-1-i];
				palist -> element[palist -> n-1-i] = t;
			}
		}
	}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
顺序表是一种常见的数据结构,用于存储一组具有相同类型的元素。它的基本操作包括创建、查找、插入和删除等。 在C语言中,可以通过使用数组来实现顺序表。我们可以定义一个数组来存储顺序表的元素,然后通过索引来访问和操作其中的元素。引用中的代码展示了一个简单的顺序表的例子,它使用了C语言来实现。在这个例子中,我们可以看到如何创建一个顺序表、插入元素、删除元素以及查找元素的前驱和后继。 引用中的代码是一个测试顺序表基本操作的例子。它使用了一个自定义的List类来实现顺序表,并对其进行了各种操作,包括插入元素、删除元素、查找元素的前驱和后继以及遍历整个顺序表顺序表的结构体定义可以根据具体的需求进行定义。在引用中的代码中,定义了一个结构体ConnTimeout,其中包含了一个int类型的fd和一个time_t类型的timeout成员变量。这个结构体可以用来表示连接超时的信息。 总而言之,顺序表是一种常见的数据结构,可以通过使用数组来实现。在C语言中,可以使用数组和相关的操作来创建、查找、插入和删除顺序表中的元素。结构体的定义可以根据具体的需求进行自定义。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据结构顺序表c++代码](https://download.csdn.net/download/qq_46546083/13458006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++数据结构顺序表(模板类实现)](https://blog.csdn.net/sagjhdj/article/details/123260460)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【数据结构顺序表(C++)](https://blog.csdn.net/qq_51604330/article/details/120600041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随处可见的打字员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值