现在开始正文,第一章:线性表
线性表在我们日常算法中最常遇见,其分为两种: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]