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