#include<stdio.h>
#include <stdlib.h>
# define initsize 5
typedef struct node {
int * data;
int maxsize;
int length;
}Sqlist;
void Initlist (Sqlist &L){ //初始化顺序表
L.data=(int *)malloc(sizeof(int)*initsize);
L.length=0;
L.maxsize=initsize;
}
void increasesize (Sqlist &L,int len){ //扩充容量
int*p=L.data;
L.data=(int *)malloc(sizeof(int)*(initsize+len)) ;
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.maxsize=initsize+len;
free(p);
printf("扩充了容量\n");
}
void look(Sqlist &L){ //查看表中元素
for(int i=0;i<L.length;i++){
printf("L.data[%d]=%d\n",i,L.data[i]);
}
printf("L.length=%d\n",L.length);
}
bool insert (Sqlist &L,int i,int a){ //插入元素
if(i<1||i>L.length+1){
printf("插入不合法\n");
return 0;
}
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=a;
L.length++;
if(L.length==L.maxsize){
increasesize(L,5);
}
printf("插入成功\n");
return true;
}
bool Delete1 (Sqlist &L,int i,int &del){ //根据位序删除元素,并将元素带回来
if(i<1||i>L.length-1){
printf("删除不合法\n");
return 0;
}else
del=L.data[i-1];
for(int j=i-1;j<L.length-1;j++){
L.data[j]=L.data[j+1];
}
L.length--;
printf("删除成功,删除的元素为%d\n",del);
return true;
}
bool Delete2(Sqlist &L,int a,int &del){ // 根据元素的值删除元素,并将位序带回来
for(int i=0;i<L.length;i++){
if(L.data[i]==a){
del=i+1;
for(int j=i;j<L.length-1;j++){
L.data[j]=L.data[j+1];
}
L.length--;
printf("删除成功,删除的元素为位序为%d\n",i+1);
return true;
}
}
printf("未找到该元素,删除失败");
return 0;
}
bool alter(Sqlist &L,int i,int a){ //更改元素
if(i<1||i>L.length-1) {
printf("该位序不合法");
return 0;
}
L.data[i-1]=a;
printf("更改成功\n");
return true;
}
bool seek1(Sqlist &L,int i,int &value){
//根据位序查找元素,并把值带回来;
if(i<1||i>L.length-1) {
printf("该位序不合法");
return 0;
}
value=L.data[i-1];
printf("查找成功,第%d位元素为%d\n",i,value);
return true;
}
bool seek2(Sqlist&L,int a,int &value) //根据元素的值寻找元素的位序 ,并将位序带回来
{
for(int i=0;i<L.length;i++){
if(L.data[i]==a){
value=i+1;
printf("找到了位序为%d\n",i+1);
return true;
}
}
printf ("未查找到\n") ;
return 0;
}
int main(){
Sqlist L;
Initlist (L);
insert(L,1,1);
insert(L,2,2);
insert(L,3,3);
insert(L,4,4);
insert(L,1,1);
look(L);
int del;
Delete1 (L,2,del); //将第2位的元素删除,并返回元素的值;
look(L);
int del2;
Delete2(L,4,del2) ; //将值为4的元素删除,并返回位序 ;
printf("del2=%d\n",del2);
look(L);
alter(L,1,7); //将第一位改成7 ;
look(L);
int value;
seek1(L,1,value); //查找第1位元素的值;
printf("第一位元素位%d",value);
seek2(L,3,value); //查找值为3的元素;
printf("值为3的元素位序为%d",value) ;
}