zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/lsy-lsy/p/10025138.html
Copyright © 2011-2022 走看看