#defineMaxSize100typedefstruct{
ElemType data[MaxSize];// int data[MaxSize];也可以,看题目条件int length;}SqList;
2. 单链表
typedefstructLNode{
ElemType data;// int data; 也可以,看题目条件structLNode* next;}LNode;
二、顺序表的操作
1. 在顺序表L中查找第一个值为x的元素下标
intfind_elem(SqList L,int x){for(int i =0; i < L.length; i ++)if(L.data[i]== x)return i;return-1;}
2. 在顺序表L下标为pos的位置插入元素x
intinsert_elem(SqList &L,int pos,int x){if(L.length == MaxSize || pos <0|| pos > L.length)return0;// 注意:pos可以取到0 ~ L.length的每一个位置,// 取到L.length时跳过循环直接赋值即可for(int i = L.length -1; i >= p; i --)
L.data[i +1]= L.data[i];
L.data[pos]= x;(L.length)++;return1;}
3. 在顺序表L下标为pos的位置删除元素x
intdelete_elem(SqList &L,int pos,int&x){if(pos <0|| pos > L.length -1)return0;
x = L.data[pos];for(int i = pos +1; i < L.length; i ++)
L.data[i -1]= L.data[i];(L.length)--;return1;}
三、单链表的操作
1. 在单链表L中将值为x的新结点插入到第i个位置
// 默认L是带头结点的单链表boolinsert_elem(LNode*&L,int i,int x){if(i <1)returnfalse;auto p = L;// p指向第i个元素的前一个位置int j =1;while(p && j < i){
p = p->next;
j ++;}if(!p)returnfalse;auto s =newLNode(x);
s->next = p->next;
p->next = s;returntrue;}
2. 在单链表L中删除值为x的结点
booldelete_elem(LNode*&L,int x){auto pre = L, p = L->next;while(p){if(p->data == x)break;
p = p->next;}if(!p)returnfalse;else{
pre->next = p->next;free(p);returntrue;}}
3. 创建链表
(1) 头插法
LNode*create_list(int a[],int n){auto dummy =newLNode(-1);// 虚拟头结点
dummy->next =NULL;for(int i =0; i < n; i ++){auto s =newLNode(a[i]);
s->next = dummy->next;
dummy->next = s;}return dummy;}
(2) 尾插法
LNode*create_list(int a[],int n){auto dummy =newLNode(-1);// 虚拟头结点auto cur = dummy;for(int i =0; i < n; i ++){auto s =newLNode(a[i]);
cur->next = s;
cur = cur->next;}
cur->next =NULL;return dummy;}