C语言顺序表

顺序表结构可设为一个数组和一个指向尾部的变量,数组用来存放元素,指向尾部的变量在插入元素的时候加一,删除元素的时候减一,始终指向尾部。

1 typedef int elemtype;
2 
3 typedef struct arrayList{
4     elemtype date[MAXSIZE];
5     int last;    
6 }ArrayList; 

初始化时给对应的指针分配空间,并使last=-1

 1 ArrayList *init_ArrayList(){
 2     
 3     ArrayList *a = (ArrayList *)malloc(sizeof(ArrayList));
 4     if(a==NULL)
 5         return NULL;
 6     
 7     a->last = -1;
 8     return a; 
 9     
10 }

插入元素:插入位置为x,使>=x的所有元素向后移动一个位置,然后在该位置插入新元素

 1 int insertList(ArrayList *a,elemtype e,int x) {
 2     
 3     if(a->last>=MAXSIZE-1){
 4         printf("顺序表已满");
 5         return 0;
 6     }
 7     
 8     //顺序表需要顺序插入,即不能在last外插入    
 9     if(x<1 || x>a->last+2){
10         printf("插入位置错误
");
11         return 0; 
12     }
13     
14     int i;
15     for(i=a->last;i>=x-1;i--)//last代表数组最后一个元素的下标 
16         a->date[i+1] = a->date[i];//节点依次向后移动一个位置
17     a->date[i+1] = e;
18     a->last++;
19     return 1; 
20     
21 }

删除元素:使位置x后的所有元素向前移动一个位置

 1 int deleteList(ArrayList *a,int x){
 2     
 3     if(x<1 || x>a->last)
 4         return 0;
 5     
 6     int i;
 7     for(i=x;i<=a->last;i++)
 8         a->date[i-1] = a->date[i];
 9     a->last--;
10     return 1;
11     
12 }

遍历

1 void printList(ArrayList *a){
2     
3     int i;
4     for(i=0;i<=a->last;i++)
5         printf("%d ",a->date[i]);
6     
7 }

试运行:

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("创建成功
");
    
    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);
    
}

结果:

对于顺序表查找最为方便快捷:

 1 int getPois(ArrayList *a,elemtype e){//获得位置 
 2     
 3     int i;
 4     for(i=0;i<=a->last;i++){
 5         if(a->date[i]==e)
 6             return i+1;
 7     } 
 8     return -1;
 9     
10 }
11 
12 elemtype getEle(ArrayList *a,int x){//获得元素 
13     
14     if(x<1 || x>a->last+1)
15         return -1;
16         
17     return a->date[x-1];
18     
19 }
原文地址:https://www.cnblogs.com/lsy-lsy/p/10025138.html