顺序表的操作(数据结构)

顺序表

#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#define InitSize 10

typedef struct{
	int *data;
	int MaxSize;
	int Length;
}SeqList;

//创建链表 
void InitList(SeqList &L){
	L.data=(int *)malloc(InitSize*sizeof(int));
	L.Length=0;
	L.MaxSize = InitSize;
}

//写入顺序表
void WriteList(SeqList &L){
	printf("请输入你要创建的长度:");
	scanf("%d",&L.Length);
	printf("请输入你要放的元素个数%d\n",L.Length);
	for(int i=0;i<L.Length;i++)
		scanf("%d",&L.data[i]);	
} 

//增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
	int *p = L.data;
	L.data = (int *)malloc((InitSize+len)*sizeof(int));
	for(int i=0;i<L.Length;i++){
		L.data[i] = p[i];
	}
	L.MaxSize = L.MaxSize+len;
	printf("顺序表的长度为:%d\n",L.MaxSize);
	free(p);
} 

//按位查找元素
bool GetElem(SeqList &L){
	int i;
	printf("你要查找的第几个元素:");
	scanf("%d",&i);
	if(i<1 || i>L.Length){
		printf("查询失败");
		return false; 
	}
	printf("第%d个元素是%d\n",i,L.data[i-1]);
	return true;
} 

//按值查找元素
void LocalElem(SeqList &L){
	int e;
	int k=1;
	printf("输入你想要查找的元素");
	scanf("%d",&e);
	for(int i=0;i<L.Length;i++){
		if(L.data[i]==e){
			printf("找到啦,第%d\n",i+1);
			k=0;
			break;
		}
	}
	if(k)
		printf("找不到元素%d\n",e);
} 

//顺序元素的元素插入
bool ListInsert(SeqList &L){
	int i,e;
	printf("输入你要插入的位置和元素:");
	scanf("%d %d",&i,&e);
	if(i<1 || i>L.Length+1){
		printf("下标越界\n");
		return false;
	} 
	if(L.Length>L.MaxSize){
		printf("已满\n");
		return false;
	}
	for(int j=L.Length;j>=i;j--){
		L.data[j] = L.data[j-1];
	}
	L.data[i-1] = e;
	L.Length++;
	printf("插入的元素是%d,位置是%d\n",e,i);
	return true;
} 

//删除顺序表中的元素
bool ListDelete(SeqList &L){
	int i,e;
	printf("输入要删除的元素位置:");
	scanf("%d",&i);
	if(i<1 || i>L.Length+1){
		printf("下标越界");
		return false;
	} 
	if(!L.data){
		printf("空表");
		return false;
	}
	e = L.data[i-1];
	for(int j=i;j<L.Length;j++){
		L.data[j-1] = L.data[j];
	}
	L.Length--;
	printf("删除元素%d\n",e);
	return true;
} 

//打印顺序表 
bool PrintList(SeqList &L){
	if(!L.data){
		printf("空表");
		return false;
	}
	printf("顺序表里的元素有:");
	for(int i=0;i<L.Length;i++)
		printf("%d ",L.data[i]);
	printf("\n");
	return true;
}

//求顺序表的长度
int Length(SeqList &L){
	if(L.Length==0) return 0;
	return L.Length;
} 

//顺序表的销毁
void DestoryList(SeqList &L){
	char a;
	getchar();
	printf("是否进行销毁:");
	scanf("%c",&a);
	if(a=='Y'){
		L.Length=0;
		L.MaxSize=0;
		free(L.data);
		printf("已经销毁");
	}
	
} 

//反转顺序表
void ReverseList(SeqList &L){
	printf("反转后的顺序表");
	int temp;
	for(int i=0;i<L.Length/2;i++){
		temp = L.data[i];
		L.data[i] = L.data[L.Length-i-1];
		L.data[L.Length-i-1] = temp;
	}
} 

int main(){
	int len;
	SeqList L;
	InitList(L);
	WriteList(L);
	PrintList(L);
	IncreaseSize(L,2);
	ListInsert(L);
	PrintList(L);
	ListDelete(L);
	PrintList(L);
	LocalElem(L);
	PrintList(L);
	GetElem(L);
	PrintList(L);
	ReverseList(L);
	PrintList(L);
	len = Length(L);
	printf("顺序表的有效长度为:%d\n",len);
	DestoryList(L);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值