zoukankan      html  css  js  c++  java
  • 13.1.22: 线性表之顺序表

      1 /*
      2 1.此方法是看着数据结构李葆春自写的顺序表
      3 2.此方法Delete 还没限制i 范围。
      4 3.此定义只是用来测试用
      5 
      6 
      7 Levi.   
      8       date: 2013.1.21
      9 */
     10 #include <stdio.h>
     11 #define ElemType int
     12 #define MAX_LEN 20
     13 
     14 typedef struct {
     15     ElemType data[MAX_LEN];
     16     int len;
     17 }SqList;
     18 
     19 
     20 void Print(SqList L);
     21 void SetNull(SqList *L){
     22     (*L).len=0;
     23 }
     24 
     25 int Length(SqList L){
     26     return L.len;
     27 }
     28 
     29 ElemType GetElem(SqList L,int i){
     30     if(i<1||i>L.len)
     31               printf("i's value is error !");
     32     
     33     return L.data[i];
     34 }
     35 
     36 int Locate(SqList L,ElemType x){
     37     int i=1;
     38     if(i<1||i>L.len){
     39               printf("i value is not right !");
     40               return 0;
     41     }
     42     while(i<=L.len&&L.data[i]!=x)
     43               i++;
     44     if(i==L.len){
     45               printf("The x is not in SqList");
     46               return 0;
     47     }
     48     
     49     else
     50               return i;
     51 }
     52 
     53 int InsertNode(SqList *L,ElemType x,int i){
     54     int j;
     55     if(i<1||i>(*L).len){
     56               printf("Error\n");
     57               return 0;
     58     }
     59     for(j=(*L).len;j>=i;j--)
     60             (*L).data[j+1]=(*L).data[j];
     61     (*L).data[i]=x;
     62     ++(*L).len;
     63     Print(*L);
     64     return 0;
     65 
     66 }
     67 
     68 int DeleteNode(SqList *L,int i){
     69     int j;
     70     for(j=i+1;j<=(*L).len;j++)
     71               (*L).data[j-1]=(*L).data[j];
     72     --(*L).len;
     73 }
     74 
     75 void Print(SqList L){
     76     int i;
     77     for(i=1;i<=L.len;i++)
     78               printf("%d ",L.data[i]);
     79     printf("\n");
     80 }
     81 
     82 
     83 int main(){
     84     SqList L;
     85     scanf("%d",&L.len);
     86     printf("Len : %d\n",L.len);
     87     int i,value,pos;
     88     for(i=1;i<=L.len;i++){
     89               scanf("%d",&L.data[i]);
     90             
     91     }
     92     Print(L);
     93     
     94     scanf("%d %d",&pos,&value);
     95     InsertNode(&L,value,pos);
     96     printf("%d\n",Length(L));
     97 //    Print(L);
     98 //    scanf("%d",&pos);
     99 // DeleteNode(&L,pos);
    100 //    scanf("%d",&value);
    101 //    int dis=Locate(L,value);
    102 //    printf("%d",dis);
    103 
    104     scanf("%d",&pos);
    105     int dis = GetElem(L,pos);
    106     printf("%d\n",dis);
    107 //    Print(L);
    108     
    109     scanf("%*s");
    110     return 0;
    111 }
    /*
    1.此方法是参照严蔚敏的数据结构。
    2.用指针数组感觉很容易出错,所以以后还是避免用指针。
    
    
    
    Levi.
           date:13.01.22 
    */
    
    #include <stdio.h>
    #include <sys/malloc.h>
    #include <stdlib.h>
    #define MAX 200
    
    typedef struct SqList{
        int *elem;
        int len;
        int listsize;
    }SqList;
    
    void InitList(SqList *L){
        L->elem=(int *)malloc(MAX*sizeof(int));
        if(!L->elem)
                  printf("Error!");
        (*L).len=0;
        (*L).listsize=MAX;
        printf("list size = %d\n",(*L).listsize);
    }
    
    void DestroyList(SqList *L){
        free((*L).elem);
        (*L).elem=NULL;
        (*L).len=0;
        (*L).listsize =0;
    }
    
    void ClearList(SqList *L){
        (*L).len=0;
    }
    
    void GetElem(SqList L,int i,int *e){
        if(i<1||i>L.len)
                  printf("It is Wrong !");
        *e=*(L.elem+i-1);
    }
    
    int ListInsert(SqList *L,int i,int e){
        int *q,*p;
        q=(*L).elem+i-1;
        for(p=(*L).elem+(*L).len-1;p>=q;--p)
            *(p+1) = *p;
            *q=e;
            ++(*L).len;
        
        return 0;
    }
    
    int ListDelete(SqList *L,int i){
        int *p,*q;
        if(i<1||i>(*L).len)
                  return -1;
        p=(*L).elem+i-1;
        q=(*L).elem+(*L).len-1;
        for(++p;p<=q;++p)
                  *(p-1)=*p;
        (*L).len--;
        return 0;
    }
    void Print(SqList L){
        int *p=L.elem;
        int i;
        for(i=1;i<=L.len;i++){
            printf("%d ",*p++);
        }
        printf("\n");
    }
    
    int main(){
        int j,pos,value;
        SqList L;
        InitList(&L);
        scanf("%d",&(L.len));
        for(j=1;j<=L.len;j++)
                  scanf("%d",(L.elem+j-1));
        Print(L);    
        
        scanf("%d %d",&value,&pos);
        ListInsert(&L,pos+1,value);
        Print(L);
        scanf("%d",&pos);
        ListDelete(&L,pos+1);
        Print(L);
        scanf("%d",&pos);
        GetElem(L,pos,&value);
        printf("%d/n",value+1);
        return 0;
    }   
  • 相关阅读:
    CAN总线布线规范
    使用make_ext4fs时报错,No such file or directory
    安装arm-2009q3交叉编译器后,执行No such file....
    Busybox下make menconfig报错处理!
    解决Markdown转为PDF后,尖括号不能正确显示问题。
    开发板与PC直连 交叉、直连网线做法
    BusyBox tftp使用
    STM32的flash数据页转存过程分析!
    c语言中log函数的使用!
    POJ 3667 Hotel
  • 原文地址:https://www.cnblogs.com/suiyun/p/2870657.html
Copyright © 2011-2022 走看看