数据结构-List

#include <stdio.h>
#include <stdlib.h>
	
	
#define Maxsize 10
	
//定义线性表结构
//1.静态存储

typedef struct{
	int data[Maxsize];   //用静态的“数组”存放数据 ElemType->int
	int length;               //表示顺序表当前的长度
}SqList;

void InitList(SqList &L){
	for(int i = 0 ; i < Maxsize ; i++)
		L.data[i] = 0;    //将所有数据全部设置成0
	L.length = 0;         //顺序表当前的长度0
}


//2.动态分配---使用指针//
/*
#define InitSize 10  //顺序表的初始长度
typedef struct{
	int *data;  //指示动态分配数组的指针ElemType
	int MaxSize;     //顺序表的最大容量
	int length;      //顺序表当前长度
}SeqList;

//初始化
void InitList(SeqList &L){
	L.data = (int*)malloc(sizeof(int)*InitSize);
	L.length = 0;
	L.MaxSize = InitSize;
}

//增加动态数组的长度
void IncreaseSize(SeqList &L, int len){
	int *p=L.data;
	L.data=(int *)malloc(sizeof(int)*(InitSize+len));
	for(int i = 0; i<L.length; i++){
		L.data[i] = p[i];
	}
	L.MaxSize += len;
	free(p);        //将p指向的原来的10个单位的内存释放
}
*/
	
//insert---插入元素
//在第i个位置插入新的元素
int ListInsert(SqList &L, int i, int e){   //将第i个元素及以后的元素后移
	//i=[1,L.length+1]切L.length<MaxSize
	if(i<1||i>L.length+1){
		printf("insert fail==i is X\n");
		return 0;
	}
	if(L.length>=Maxsize){
		printf("insert fail==over\n");
		return 0;
	}
	
	for(int j = L.length; j>=i; j--)
		L.data[j] = L.data[j-1];     //元素后移
	L.data[i-1] = e;                 //第i个位置的下标是i-1
	L.length++;
	printf("insert success!\n");
	return 1;
}//时间复杂度
//最好情况:插入到表尾,不需要移动数据,循环次数0次,最好时间复杂度O(1);
//最坏情况:插入到表头,需要移动数据n个,循环次数n次,最好时间复杂度O(n);
//平均情况:不想说,要循环(n+(n-1)+...+0)/(n+1)=...
	

//delete----删除元素
bool ListDelete(SqList &L, int i, int &e){
	if(i<1||i>L.length)   //这个地方不是>=
		return false;
	e = L.data[i-1];
	for(int j=i; j<L.length; j++)
		L.data[j-1] = L.data[j];
	L.length--;
	return true;
}
//最好情况:O(1),最坏情况O(n),平均情况O(n)


//find---查找
//1.按位查找
bool ListFind(SqList L,int i ,int &e){  //查找第i个元素的值
	if(i<1||i>L.length){
		return false;
	}
	e = L.data[i-1];
	return true;
}//时间复杂度:O(1)

//按值查找
int ListFind_E(SqList L,int e){
	for(int i = 0;i<L.length;i++){
		if(L.data[i]==e)
			return i+1;
	}
	return 0;	
}//时间复杂度:最好:O(1),最坏O(n),平均:...

int main () 
{
	SqList L;       //声明一个线性表
	InitList(L);    //初始化线性表
	
	ListInsert(L,1,1);
	ListInsert(L,2,2);
	ListInsert(L,3,3);
	ListInsert(L,4,4);
	ListInsert(L,5,5);
	
	int e = 0;    //用e将数据带回来
	bool isDelete = ListDelete(L,3,e);
	if(isDelete) printf("数据已删除%d\n", e);
	else printf("删除失败\n");
	
	if(ListFind(L,3,e)) printf("第3个数是%d\n", e);
	else printf("查找失败\n");
	
	printf("4在第%d位\n",ListFind_E(L,4));
	//SeqList L;
	//InitList(L);
	//IncreaseSize(L,5);

	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值