1、在带头结点的单链表L中删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一
typedef struct LNode{
int data;
struct LNode *next;
}*LinkList;
void Del(LinkList &L,int x){
LNode *a=L,*b=L->next;
while(b!=NULL){
if(b->data==x){
a->next=b->next;
free(b);
b=a->next;
}
else{
b=b->next;
a=a->next;
}
}
2、将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
typedef struct {
ElemType data[MaxSize];
int length;
}SqList;
SqList Merge(SqList L1,SqList L2){
SqList L3;
int i=0,j=0,x=0,size=L1.length+L2.length-2;
while(i<L1.length&j<L2.length){
if(L1.data[i]<=L2.data[j]){
L3.data[x]=L1.data[i];
i++;
}
else{
L3.data[x]=L2.data[j];
j++
}//if
x++;
}//while
while(i<L1.length){ //考虑两个表不等长的情况
L3.data[x]=L1.data[i];
i++;
x++;
}//while
while(j<L2.length){
L3.data[x]=L2.data[j];
j++;
x++;
}//while
return L3;
}//Merge
3、设计一个算法,将顺序表L的所有元素逆置要求空间复杂度为O(1)
typedef struct{
Elementype data[MaxSize];
int length;
}SqList;
void Reverse(SqList &L)
int l=L.length;
Elementype x;
int i=0,j=l-1;
while(l>1){
x=L[i];
L[i]=L[j];
L[j]=x;
l=l-2;
i++;
j--;
}
4、从有序顺序表中删除所有值重复的元素,使表中所有元素的值均不同。
typedef struct {
Elementype data[MaxSize];
int length;
}SqList;
void Delre(SqList &L){
int i=0,j=1;
while(j!=L.length){
if(L.data[i]==L.data[j]){
L.data[j]==NULL;
j++;
}
i=j;
j++;
}
int a=0,b=0;
for(int i=0;i<L.length;i++){
if(L.[i]==NULL){
b++;
}else{
L.[a]=L.[i];
a++;}
L.length=L.length-b;
}
5、已知在一维数组A[m+n]中依次存放两个线性表{a1,a2,a3,…,am}和{b1,b2,b3…,bn}。试编写一个函数,将数组中两个顺序表中的位置互换,即将{b1,b2,b3…bn}放在{a1,a2,a3,…,am}的前面
typedef struct{
Elementype data[MAXSIZE];
int length;
}SqList;
void Swap(SqList &L,int m,int n,int l){
int i=m,j=n;
Elementype x;
while(i!=(l/2+1)){
x=L.data[i];
L.data[i]=L.data[j];
L.data[j]=x;
i++;
j--;
} //while
}//Swap
int main(){
SqList L;
Initial(L);//初始化
Swap(L,1,m,m);
Swap(L,m+1,m+n,n);
Swap(L,1,m+n,m+n);
}
6、头插法建立单链表
typedef struct{
Elementype data;
struct LNode *next;
}LNode,*LinkList;
LinkList Head_Insert(LinkList &L){
LNode *p;//先创建结构类型指针
L=(LinkList)malloc(sizeof(LNode));
Elementype x;
scanf(“%d”,&x);
while(x!=NULL){//NULL代表结束值,结束值为几就是几
p=(LNode*)malloc(sizeof(LinkList));
p->data=x; p->next=L->next; L->next=p;
scanf(“%d”,&x);
}//while
return L;
}//Head_Insert
7、尾插法建立
LinkList End_Insert(LinkList &L){
LNode *p,*e=L;
Elementype x;
L=(LinkList)malloc(sizeof(LNode));
scanf(“%d”,&x);
while(x!=NULL){//NULL代表结束值,结束值为几就是几
p=(LNode*)malloc(sizeof(LinkList));
p->data=x; e->next=p; p->next=NULL; e=e->next;
scanf(“%d”,&d);
}//while
return L;
}//End_Insert
8、将带头结点的单链表原地逆置,空间复杂度为O(1)
typedef struct{
Elementype data;
struct LNode *next;
}LNode,*LinkList;
bool Invert(LinkList &L){
if(L==NULL)
return fasle;
LNode *a=L->next,*b=a->next,*p=a;
a->next=NULL; b=b->next; a=b;
while(a!=NULL){
a->next=p; p=a; a=b; b=b->next;
}//while
L->next=p;
return L;
}//Invert