上周找了一周多的房子没更新文章,感受就是钱多找房子好找啊,所以一起努力吧
描述任何结构类型的数据都可以用数据对象集和操作集
数据对象集:个人理解为组成某种数据结构元素组成的集合
操作集:主要是增删改查之类的操作
线性表(List):
数据对象集:由n(>=0)个元素构成的有序序列(a1,a2,a3,...an,可以理解n个元素在内存中连续存放的);本文中元素为字符类型(char)
操作集:
线性表L表示List的一个线性表,整数i标识位置(不是指针),元素X标识为线性表存储的数据,则线性表的主要操作集有:
1.List makeEmpty(): 初始化一个空链表;
2.char FindKth(List L, int K): 根据一个下标K找出K位置的元素
3.int Find(List L, char X): 根据给点的元素X找到X第一次出现的位置并返回位置索引
4.void Insert(List L,char X,int i): 在线性表第i-1(下标从零开始计算的)位置插入新元素X
5.void Delete(List L,int i): 删除第i-1位置的元素
6.int Length(List L): 返回线性表的长度
*/
//Position: 位置
typedef int Position;
//List:指向线性表即结构体的指针
typedef struct LNode * List;
//MAXSize:线性表结构体最多存储数据的个数
int MAXSize = 10;
//线性表存储的元素,用结构体List 表示一个线性表,Data[10]为长度为10的一个字符数组,用于存放要插入的数据, int 类型的Last表示当前数组中最后一个数据在数组中的位置,当数组中没有元素即线性表为空时,Last为-1;
struct LNode {
char Data[10];
Position Last;
};
/初始化/
List makeEmpty()
{
List L;
//初始化一块内存给线性表,即结构体
L = (List)malloc(sizeof(struct LNode));
//表为空时,Last为-1
L->Last = -1;
return L;
}
define ERROR -1
/** 查找 */
Position Find(List L, char x)
{
Position i = 0;
//小于等于数组个数 并且不能等于
while (i <= L->Last && L->Data[i] != x) {
i++;
if (i > L ->Last) {
return ERROR;
}else{
return i;
}
}
return ERROR;
}
/** 插入 */
bool Insert(List L,char x,Position p)
{
Position i;
bool result = false;
if (L->Last == -1) {
L->Data[0] = x;
L->Last++;
return true;
}
if (L->Last == MAXSize) {
printf("表满");
return result;
}
if (p < 0 || p > L->Last+1) {
printf("位置不合法");
return result;
}
//将位置p后边的元素向后移动
for (i = L->Last; i >= p; i--) {
L->Data[i+1] = L->Data[i];
L->Data[p] = x;//新元素插入
L->Last++;
result = true;
}
return result;
}
/** 删除 */
bool Delete(List L,Position p)
{
Position i ;
bool result = false;
if (p > L->Last || p < 0) {
printf("不存在:%d\n",p);
return result;
}
for (i = p+1; i <= L->Last; i++) {
L->Data[i-1] = L->Data[i];
}
L->Last--;
result = true;
return result;
}
int main(int argc, const char * argv[]) {
//创建
List list = makeEmpty();
Insert(list, 'a', 0);
Insert(list, 'b', 0);
Insert(list, 'c', 1);
bool b = Delete(list, 0);
printf("%d",b);
return 0;
}