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;
}   
原文地址:https://www.cnblogs.com/suiyun/p/2870657.html