数据结构第二版(朱昌杰版)四

现在开始正文,第一章:线性表
线性表在我们日常算法中最常遇见,其分为两种:1、有序线性表;2、无序线性表
如所表示的,有序线性表中,元素之间是相互有关系的,大小关系
无序线性表中的是无序的;
实现方式同样有两种:1、顺序结构和链式结构
基本的运算有{
//初始化线性表
initList(&L)
//线性表的插入
insertList(&L,i,n);
//线性表的删除第i上的元素
deleteList(&L,i);
//判断线性表是否为空
isEmptyList(&L);
//查找元素
selectList(&L,n);
//长度返回;
lengthList(L);

}


正片开始
定义顺序表

#include"studio.h"
#define maxsize 100//定义数据的大小
typedef int DataType;//定义数组的类型
typedef struct{
	DataType data[maxsize];
	int length;
}sqList;//定义顺序表

链表的初始化

void initList(sqlList &L){
	L.length=0;
}

插入运算:先简单的做一个简单的运算,如果插入在最前面,移动次数n-1,如果是最后面,就是1,接在后面就好了
所以平均就是n/2次;

void insertList(sqlList &L,int i,int n){
		iflength>=maxsize-1){
			printg("不好意思,已经存满了,放不了你的位置");
		}else{
			if(i>length-1){
				L.data[i]=n;
			}else{
				int j = length-1;
				for(j;j>i;j++){
					a[j+1]=a[j];
				}
			}
	}
}

删除如上雷同:插入是元素从后前移动
而删除就是从前到后填满前面的坑;
//
按数值查找

int findEle(sqList L, int n){
	int index,i;
	for(i=0;i<L.length;i++){
		if(L.data[i]==n) 
			return i;
		else 
			return -1;
	}
	return -1;
}

接下来是算法小练习,主张(思想)
一、有A和B表是有序的,使得现在C表为AB合并的表,并且是有序的;
纯手写一个出来

void cList(sqList A,sqList B,sqList C){
	//上面两个假装已经初始化过,这边就是做一个整合的操作
	//声明两个标识 flag 和flag1
	int flag=0,flag1=0,i=0;
	while(C.length == (A.length+B.length)){
		C.[i]=max(A.data[flag],B.data[flag1])
		if(A.data[flag]>B.data[flag1]){
			flag++;
		}else{
			flag1++;
		}
	}
}

二、第二个小东西:要求最少的辅助空间,让A表转置:思想,让我想到只需要一个交换空间就好了,但是后来想到,拿L.data[length]这个位置作为交换位置,那就是意味着,没有额外的辅助空间,前提条件是数组没有占满总的大小;
第一种:纯手撸

void revese(sqList &L){
	int temp,i;
	for(i = 0;i<L.length-1;i++)
		temp=Ldata[length-1];
		L.data[length]=L.data[i];
		L.data[i]=temp;
}

纯手撸
第二种;和上面,就是temp是L.data[length]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值