1.复习c的struct的时候发现了一篇关于struct和class的对比
https://www.jianshu.com/p/409f931c17d9
https://zhuanlan.zhihu.com/p/47808468
虽然依旧觉得这两者差别不大,还是尽量用class比较好(封装),而且有private,安全性较高
2.malloc的使用
向malloc申请的空间大小是以字节为单位的,返回的结果是void*,需要类型转换为自己需要的类型
格式
#include<stdlib.h>
void* malloc(size_t size);
(int*)malloc(n*sizeof(int));
a=(int*)malloc(number*sizeof(int));
free(a);
注意,申请后必须用free()释放掉,否则长时间会引起系统崩溃(内存不够用)
3.线性表
类型名称:线性表(List)
操作集:L包含在List中
List MakeEmpty():初始化一个空线性表L;
ElementType FindKth(int K,List L):根据位序K,返回相应元素;
int Find(ElementType X,List L):在线性表L中查找X的第一次出现位置;
void Insert(ElementType X,int i,List L):在位序i前插入一个新的元素X;
void Delete(int i,List L):删除指定位序i的元素;
int Length(List L):返回线性表L的长度n;
顺序表中基本操作的实现
1.初始化。
List MakeEmpty( ) {
List PtrL;
PtrL = (List )malloc( sizeof(struct LNode) );
PtrL->Last = -1;
return PtrL; }
2.查找
int Find( ElementType X, List PtrL ) { int i = 0;
while( i <= PtrL->Last && PtrL->Data[i]!= X ) i++;
if (i > PtrL->Last) return -1; /* 如果没找到,返回-1 */
else return i; /* 找到后返回的是存储位置 */
3.插入
①判断插入位置i是否合法(1<=i<=n+1),不合法返回ERROR
②判断顺序表存储空间满了没,or ERROR
③将第n个至第i个位置的元素后移一位,空出第i个位置
④插入新元素
⑤表长加一,length++
void Insert( ElementType X, int i, List PtrL )
{ int j;
if ( PtrL->Last == MAXSIZE-1 ){ /* 表空间已满,不能插入*/
printf("表满");
return;
}
if ( i < 1 || i > PtrL->Last+2) { /*检查插入位置的合法性*/
printf("位置不合法");
return;
}
for ( j = PtrL->Last; j >= i-1; j-- )
PtrL->Data[j+1] = PtrL->Data[j]; /*将 ai~ an倒序向后移动*/
PtrL->Data[i-1] = X; /*新元素插入*/
PtrL->Last++; /*Last仍指向最后元素*/
return;
}