王道数据结构代码:顺序表的增删改查操作
#include<bits/stdc++.h> using namespace std; #define MaxSize 10 typedef struct { int data[MaxSize]; int lenght; }SqList; bool ListInsert(SqList &L , int index , int e){ // 插入的顺序表,位置,元素 if(index < 1 || index > L.lenght+1)/// id 是元素的位置,下表是从1开始的 return false; // 插入失败 if(L.lenght >= MaxSize) return false; for(int i = L.lenght ; i >= index ; i--){ L.data[i] = L.data[i-1]; } L.data[index-1] = e; L.lenght ++; return true; // 插入成功 } bool ListDelete(SqList &L , int index , int &e){ // e 为删除的变量 , 把这个变量“带回去”,所以加个& , //不用int 是这里的bool型函数用来检查有没有删除成功, //改成int返回的话,就不用定义e了,但是不能判断删除操作是成功了 if(index < 1 || index > L.lenght) return false; e = L.data[index-1]; // 保存删除的元素 for(int i = index; i < L.lenght ; i++){ L.data[i-1] = L.data[i]; } L.lenght--; return true; } int LocateElem(SqList L, int e){// 查找顺序表中第一个等于e的位序(不是下标) for(int i = 0 ; i < L.lenght ; i++){ if(L.data[i] == e) return i+1 ; } return -1; } int ListFind(SqList L , int index){ // 查询第index个元素 return L.data[index-1] ; } int main(){ /// 这里一定不要搞混下标和位置 , 数组下是从0开始的,位置是从1开始的 SqList L; L.data[0] = 1 ; L.data[1] = 2 ; L.data[2] = 4 ; L.data[3] = 5 ; L.data[4] = 6 ; L.lenght = 5; // 插入数据后要改长度, 不要马大哈 // 在3的位置插入3 , if(ListInsert(L,3,3)){ printf("Insert succeed!\n"); } else { printf("Insert fail!\n"); } for(int i = 0 ; i < L.lenght ; i++) printf("%d " , L.data[i]); printf("\n"); // 现在我们把刚刚插入的元素在删除掉 int e = -100000; // 用来接收返回的删除掉的元素 if(ListDelete(L,3,e)){ printf("Delete succeed!\n"); printf("Delete element is %d\n" , e); } else{ printf("Delete fail!\n"); } for(int i = 0 ; i < L.lenght ; i++) printf("%d " , L.data[i]); printf("\n"); printf("find opeartor : %d\n" , ListFind(L , 1));// 查询第一个位置的元素 printf("查询第一个等于e的位序:%d\n" , LocateElem(L,4));//e 为 4 return 0; }