基础代码,更新

L是一个顺序表,函数Status ListInsert_Sq(SqList &L, int pos, ElemType e)是在顺序表的pos位置插入一个元素e(pos应该从1开始)
```
Status ListInsert_Sq(SqList &L, int pos, ElemType e){
if(pos <= 0 ||pos > L.length+1)return ERROR;
L.length++;
ElemType *p,*q;
if(L.length >= L.listsize){
L.elem = (ElemType*)realloc(L.elem,sizeof(Status)*(L.listsize * LIST_INIT_SIZE));
if(!L.elem)exit(OVERFLOW);
L.listsize += LISTINCREMENT;
}
p = L.elem +L.length;//?
q = L.elem + pos;
while(p > q){
*p = *(p - 1);
p--;
}
*p = e;
return OK;
}
```
函数Status ListDelete_Sq(SqList &L, int pos, ElemType &e)是删除顺序表的pos位置的元素并用引用型参数e带回(pos应该从1开始)
```
Status ListDelete_Sq(SqList &L, int pos, ElemType &e){
ElemType *p,*q;
if(pos <= 0 ||pos > L.length +1)return ERROR;
L.length--;

p = L.elem +L.length;//?
q = L.elem + pos;
e = *q;
while(p >= q){
*q = *(q+1);
q++;
}
return OK;
}
```
函数int ListLocate_Sq(SqList L, ElemType e)是查询元素e在顺序表的位次并返回(如有多个取第一个位置,返回的是位次,从1开始,不存在则返回0)
```
int ListLocate_Sq(SqList L, ElemType e){
for(int i = 1;i <= L.length;i++){
int *p = L.elem + i;
if(*p==e)return i;
}
return ERROR;
}

```
函数void ListPrint_Sq(SqList L)是输出顺序表元素。实现时需考虑表满扩容的问题。
```

void ListPrint_Sq(SqList L){
for(int i = 1;i <= L.length -1;i++){
printf("%d ",*(L.elem + i));
}
printf("%d\n",*(L.elem+L.length));
}

```
L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于max的链表元素。
```
Status ListCreate_CL(LinkList &CL){

CL = (LNode*)malloc(100*sizeof(int));
if(!CL)exit(OVERFLOW);
CL ->next=CL;
LinkList p = CL,t;
int pos;
scanf("%d",&pos);
if(pos < 0) return 0;
for(int i=1;i<=pos;i++)
{
int x;
scanf("%d",&x);
t = (LNode*)malloc(sizeof(int));
t ->data = x;
t -> next = CL;
p -> next = t;
p = t;
}
return OK;
}

```

```

void ListDelete_CL(LinkList &CL,ElemType min,ElemType max){
LNode *p = CL;
if(min == max) return;
if(p->next == CL)
return;
while(p->next != CL) {
LNode *t = p->next;
if(t == CL) break;
while(t->data > min && t->data < max) {
t = t->next;
}
p->next = t;
p = t;
}
}
```
L是一个带头结点的单链表,函数ListLocate_L(LinkList L, ElemType x)要求在链表中查找第一个数据域取值为x的节点,返回其位序(从1开始),查找不到则返回0。

```
int ListLocate_L(LinkList L, ElemType x){
int n=0;LNode *ret = L->next;
while(ret){
n++;
if(ret->data == x)
return n;
else
ret = ret ->next;
}
return 0;
}
```
删除指定位置元素
```
Status ListDelete_Sq(SqList &L,int i,ElemType &e){
if((i<1)||(i>L.length)return ERROR;
p = &(L.elem[)
}

```

二分法

```
k
int l = 0, r = n-1, ans = -1;
while(l <= r) {
int mid = (l+r) / 2;
if (a[mid] > k) {
ans = mid, r = mid-1;
} else {
l = mid+1;
}
}
if (ans == -1)
a[ans] = k;
```

posted on 2020-10-06 14:51  wanners  阅读(132)  评论(0)    收藏  举报