数据结构之顺序表

    技术2025-08-13  14

    数据结构之顺序表(C语言实现)

    功能:初始化,查,插,删(增加表长度)

    #include<stdio.h> #include<stdlib.h> #define size 10 // 静态分配数组空间 typedef struct{ int data[size];//静态数组 int length;//顺序表长度 }SqList;//定义顺序表类型 //初始化 void InitList(SqList &L){ for(int i=0;i<size;i++) L.data[i]=0;//设置初值,以防脏数据 L.length=0;//初始长度为0 } /*#define initsize 10 顺序表初始长度 typedef struct{ int *data;//动态分配数组空间的指针 int maxsize;//顺序表最大容量 int length;//顺序表当前长度 }SqList; */ /* C语言动态分配、释放空间(malloc、free函数 L.data=(int *)malloc(sizeof(int)*initsize) C++使用new、delete关键字 */ /*void InitList(SqList &L){ L.data=(int *)malloc(initsize*sizeof(int)); L.length=0; L.maxsize=initsize; } //增加表长度 void IncreaseList(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); } */ //插入元素 bool ListInsert(SqList &L,int i,int e){//使用&将改变带回main(); //在位序i出插入元素 //返回bool类型,和两个if提高程序健壮性 if(i<1||i>L.length+1) return false; if(L.length>=size) return false; for(int j=L.length;j>=i;j--) L.data[j]=L.data[j-1];//位序i后面的元素往后挪 L.data[i-1]=e; L.length++; return true; } //删除元素 bool ListDelete(SqList &L,int i,int &e){ //删除元素e,并返回bool类型值判断是否删除成功 if(i<1||i>L.length) return false; e=L.data[i-1]; //将被删除的元素赋值给e for(int j=i;j<L.length;j++) L.data[j-1]=L.data[j];//位序后面的元素往前挪 L.length--; return true; } //按位查找 int GetValue(SqList L,int i){ return L.data[i-1]; } //按位查找 int GetPosition(SqList L,int e){ for(int i=0;i<L.length;i++) if(L.data[i]==e) return i+1;//返回位序 return 0; } int main() { SqList list; InitList(list); for(int i=0;i<5;i++) ListInsert(list,i,i); printf("顺序表内容:\n"); for(int i=0;i<5;i++) printf("%d ",list.data[i]); printf("\n"); printf("顺序表长度为%d\n",list.length); int e=-1; if(ListDelete(list,2,e)) printf("e=%d\n",e); for(int i=0;i<list.length;i++) printf("%d ",list.data[i]); return 0; }
    Processed: 0.011, SQL: 9