顺序表结构可设为一个数组和一个指向尾部的变量, 数组用来存放元素, 指向尾部的变量在插入元素的时候加一, 删除元素的时候减一, 始终指向尾部.
- typedef int elemtype;
- typedef struct arrayList{
- elemtype date[MAXSIZE];
- int last;
- }ArrayList;
初始化时给对应的指针分配空间, 并使 last=-1
- ArrayList *init_ArrayList(){
- ArrayList *a = (ArrayList *)malloc(sizeof(ArrayList));
- if(a==NULL)
- return NULL;
- a->last = -1;
- return a;
- }
插入元素: 插入位置为 x, 使 >=x 的所有元素向后移动一个位置, 然后在该位置插入新元素
- int insertList(ArrayList *a,elemtype e,int x) {
- if(a->last>=MAXSIZE-1){
- printf("顺序表已满");
- return 0;
- }
- // 顺序表需要顺序插入, 即不能在 last 外插入
- if(x<1 || x>a->last+2){
- printf("插入位置错误 \ n");
- return 0;
- }
- int i;
- for(i=a->last;i>=x-1;i--)//last 代表数组最后一个元素的下标
- a->date[i+1] = a->date[i];// 此时 i 已在 x-1 的左边了
- a->date[i+1] = e;
- a->last++;
- return 1;
- }
删除元素: 使位置 x 后的所有元素向前移动一个位置
- int deleteList(ArrayList *a,int x){
- if(x<1 || x>a->last)
- return 0;
- int i;
- for(i=x;i<=a->last;i++)
- a->date[i-1] = a->date[i];
- a->last--;
- return 1;
- }
遍历
- void printList(ArrayList *a){
- int i;
- for(i=0;i<=a->last;i++)
- printf("%d",a->date[i]);
- }
试运行:
- void main(){
- ArrayList *init_ArrayList();
- int insertList(ArrayList *a,elemtype e,int x);
- int deleteList(ArrayList *a,int x);
- void printList(ArrayList *a);
- ArrayList *arrayList = init_ArrayList();
- if(arrayList==NULL){
- printf("空间分配失败");
- return ;
- }
- printf("创建成功 \ n");
- insertList(arrayList,1,1);
- insertList(arrayList,2,2);
- insertList(arrayList,3,3);
- insertList(arrayList,4,4);
- insertList(arrayList,5,2);
- deleteList(arrayList,1);
- printList(arrayList);
- }
结果:
来源: https://www.cnblogs.com/lsy-lsy/p/10025138.html