顺序表增删改查(动态分配版)
#include<stdio.h>
#include<stdlib.h>
#define InitSize 20
typedef struct SqL{
int *data;
int length;
int MaxSize;
}SqList;
void initList(SqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
void IncreaseSize(SqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}
void insertList(SqList &L,int x,int i){
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=x;
L.length++;
}
void DeleteByPosition(SqList &L,int i,int &e){
e=L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
}
int SelectByPosition(SqList &L,int i){
return L.data[i-1];
}
int SelectByElement(SqList &L,int element){
for(int i=0;i<L.length;i++){
if(L.data[i]==element){
return i;
}
}
}
void SelectBySameElementAll(SqList &L,int element){
for(int i=0;i<L.length;i++){
if(L.data[i]==element){
printf("元素为4的元素下标为%d\n",i);
}
}
}
void ChangeByPosition(SqList &L,int i,int x){
L.data[i-1]=x;
}
void display(SqList &L){
for(int i=0;i<L.length;i++){
printf("第%d个元素为:%d\n",i+1,L.data[i]);
}
}
int main(){
SqL L;
initList(L);
int num;
printf("请输入您想要输入的元素个数:");
scanf("%d",&num);
if(num>L.MaxSize){
printf("%d\n",L.MaxSize);
IncreaseSize(L,num-L.MaxSize+4);
printf("%d\n",L.MaxSize);
}
printf("\n\n");
for(int i=0;i<num;i++){
printf("请输入您想要输入的第%d元素个数:",i+1);
scanf("%d",&L.data[i]);
}
L.length=num;
display(L);
printf("\n\n");
int element = SelectByPosition(L,3);
printf("当前第3个位置的元素为:%d",element);
printf("\n\n");
insertList(L,7,3);
display(L);
printf("\n\n");
int element_x = SelectByPosition(L,3);
printf("当前第3个位置的元素为:%d\n",element_x);
printf("\n\n");
int index = SelectByElement(L,4);
printf("元素为4的元素下标为%d\n",index);
printf("\n\n");
printf("所有元素为4的元素的下标为:\n");
SelectBySameElementAll(L,4);
printf("\n\n");
int e=0;
DeleteByPosition(L,3,e);
printf("被删除的第3位的元素为:%d\n",e);
display(L);
printf("\n\n");
ChangeByPosition(L,3,4);
display(L);
return 0;
}
顺序表增删改查(动态分配版)
#include<stdio.h>
#include<stdlib.h>
#define InitSize 20
typedef struct SqL{
int *data;
int length;
int MaxSize;
}SqList;
void initList(SqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
void IncreaseSize(SqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}
int InsertElementList(SqList &L,int i,int x) {
if(i<1||i>L.length+1) {
return 0;
}
if(L.length>=L.MaxSize) {
return 0;
}
for(int j=L.length; j>=i; j--) {
L.data[j]=L.data[j-1];
}
L.data[i-1]=x;
L.length++;
return 1;
}
void DeleteByPosition(SqList &L,int i,int &e) {
if(i<1||i>L.length-1) {
printf("下标不合法\n");
return ;
}
e=L.data[i-1];
for(int j=i; j<L.length; j++) {
L.data[j-1]=L.data[j];
}
L.length--;
printf("删除成功\n");
}
void ChangeByPosition(SqList &L,int i,int x) {
if(i<1||i>L.length-1) {
printf("下标不合法\n");
} else {
L.data[i-1]=x;
printf("修改成功\n");
}
}
int SelectByPosition(SqList &L,int i) {
if(i<1||i>L.length-1) {
printf("位置参数不合法\n");
return 0;
} else {
return L.data[i];
}
}
int SelectByElement(SqList &L,int x) {
for(int i=0; i<L.length; i++) {
if(L.data[i]==x) {
return i;
}
}
printf("元素为%d的元素不存在\n",x);
return -1;
}
void display(SqList &L) {
for(int i=0; i<L.length; i++) {
printf("第%d个元素为:%d\n",i+1,L.data[i]);
}
}
int main() {
SqList L;
initList(L);
int num;
printf("请输入您想要输入的元素个数:");
scanf("%d",&num);
for(int i=0; i<num; i++) {
printf("请输入您想要输入的第%d元素个数:",i+1);
scanf("%d",&L.data[i]);
}
L.length=num;
display(L);
printf("\n\n\n");
int position_a;
int element_a;
printf("插入的元素的位置为:");
scanf("%d",&position_a);
printf("\n");
printf("插入的元素为:");
scanf("%d",&element_a);
if(InsertElementList(L,position_a,element_a)) {
printf("插入第%d位置的元素%d插入成功\n",position_a,element_a);
display(L);
} else {
printf("插入第%d位置的元素%d插入失败,插入位置错误,插入范围是1-%d\n",position_a,element_a,L.length);
}
printf("\n\n\n");
int position_b;
printf("请输入您想要查找的元素的下标:");
scanf("%d",&position_b);
int element_b = SelectByPosition(L,position_b);
if(element_b) {
printf("下标为%d的元素为%d\n",position_b,element_b);
}
int element_c;
printf("请输入您想要查找的元素:");
scanf("%d",&element_c);
int index_c = SelectByElement(L,element_c);
printf("元素为%d的元素下标为%d\n",element_c,index_c);
printf("\n\n\n");
int position_d;
int element_d;
printf("想要的修改元素的位置为:");
scanf("%d",&position_d);
printf("\n");
printf("修改为:");
scanf("%d",&element_d);
ChangeByPosition(L,position_d,element_d);
display(L);
printf("\n\n\n");
int e=0;
int position_e;
printf("想要的删除的元素的位置为:");
scanf("%d",&position_e);
DeleteByPosition(L,position_e,e);
display(L);
return 0;
}