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);
}

 

posted @ 2019-05-03 20:10  aascn  阅读(207)  评论(0编辑  收藏  举报