1.2 顺序表
#include <stdio.h> #include <stdlib.h> #define MaxSize 10 // 注意:顺序表不存在头节点下标0要插入。有MaxSize定义最大长度,有Length定义当前长度,有data存放数据。 // 静态分配 typedef struct{ int data[MaxSize]; // 该顺序表是固定元素的组数。也可以构造一个其它结构体类型数组,对应于书上-ElemType int Length; // 插入一个元素记一个 }SqList; void InitList(SqList *L){ L->Length=0; } // 插入一个元素需要移动节点平均数为n/2 int ListInsert(SqList *L,int loc,int e){ int j; if(loc<1||loc>L->Length+1) return 0; // 判空判满-预留1个空位以备往后移动 if(L->Length>=MaxSize) return 0; for(j=L->Length;j>=loc;j--) // 定位到当前长度的最后一个,依次往后移动 L->data[j]=L->data[j-1]; L->data[loc-1]=e; // 插入元素 L->Length++; // 记得更新长度 return 1; } int ListDelete(SqList *L,int loc,int *e){ int i; if(loc<1||loc>L->Length) return 0; *e=L->data[loc]; for(i=loc;i<L->Length;i++){ // 注意是小于 L->data[i]=L->data[i+1]; } L->Length--; return 1; } void displayList(SqList *L){ int i; for(i=0;i<10;i++) printf("%d\n",L->data[i]); } int main(){ int i,j; SqList L; InitList(&L); for(i=0;i<10;i++){ ListInsert(&L,i,i); } displayList(&L); int e=0; ListDelete(&L,4,&e); // 4号位置存放数字5 printf("已成功删除元素%d\n",e); }