1.线性链表的顺序存储构建(SeqList.h)
顺序表构建
1 //顺序表构建 2 #include <stdio.h> 3 #define MaxSize 100 4 typedef int DataType; 5 6 typedef struct 7 { 8 DataType list[MaxSize]; 9 int size; 10 } SeqList; 11 12 //初始化顺序表L 13 void ListInitiate(SeqList *L) 14 { 15 L->size = 0; //定义初始数据元素个数 16 } 17 18 //返回顺序表L的当前数据元素个数 19 int ListLength(SeqList L) 20 { 21 return L.size; 22 } 23 24 //在顺序表L的位置i(0≤i≤L.size)前插入数据元素值x,插入成功返回1,插入失败返回0 25 int ListInsert(SeqList *L, int i, DataType x) 26 { 27 int j; 28 if(L->size >= MaxSize) 29 { 30 printf("顺序表已满无法插入! \n"); 31 return 0; 32 } 33 else if(i < 0 || i > L->size ) 34 { 35 printf("参数i不合法! \n"); 36 return 0; 37 } 38 else 39 { 40 for(j = L->size+1; j > i; j--) 41 L->list[j] = L->list[j-1]; //为插入做准备 42 43 L->list[i] = x; //插入 44 L->size ++; //元素个数加1 45 46 return 1; 47 } 48 } 49 50 //删除顺序表L中位置i(0≤i≤L->size-1)的数据元素值并存放到参数x中,删除成功返回1,删除失败返回0 51 int ListDelete(SeqList *L, int i, DataType *x) 52 { 53 int j; 54 if(L->size == 0) 55 { 56 printf("顺序表已空无数据元素可删! \n"); 57 58 return 0; 59 } 60 else if(i <0 || i > L->size-1) 61 { 62 printf("参数i不合法"); 63 return 0; 64 } 65 else 66 { 67 *x = L->list[i]; //保存删除的元素到参数x中 68 69 for(j = i +1; j <= L->size; j++) 70 L->list[j-1] = L->list[j]; //依次前移 71 72 L->size--; //数据元素个数减1 73 74 return 1; 75 } 76 } 77 78 //取顺序表L中第i个数据元素的值存于x中,成功则返回1,失败返回0 79 int ListGet(SeqList L, int i, DataType *x) 80 { 81 if(i < 0 || i > L.size-1) 82 { 83 printf("参数i不合法! \n"); 84 return 0; 85 } 86 else 87 { 88 *x = L.list[i]; 89 return 1; 90 } 91 }
示例——对顺序表的操作(增删改查)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MaxSize 100 4 #define ListLenth 50 5 typedef int DataType; 6 7 //定义顺序表的类型SeqList 8 typedef struct 9 { 10 DataType list[MaxSize]; 11 int size; 12 } SeqList; 13 14 //初始化数据 15 void CreList(SeqList *L) 16 { 17 int i; 18 19 L->size=50; 20 //顺序表加入数据,依次为0-49 21 for(i=0;i<50;i++) 22 { 23 L->list[i]=i; 24 } 25 } 26 27 //初始化顺序表*L 28 void ListInitiate(SeqList *L) 29 { 30 L->size=0; 31 } 32 33 //返回顺序表L的当前数据元素个数 34 int ListLength(SeqList *L) 35 { 36 return L->size; 37 } 38 39 //查找功能,传参——线性表L和查找元素DataType x,成功返回x在L中的序号否则返回-1 40 int ListLocate(SeqList L,DataType x) 41 { 42 int i=0; 43 while(i<L.size&&L.list[i]!=x) 44 { 45 i++; 46 } 47 if(i<L.size) 48 return (i); 49 else 50 return (-1); 51 } 52 53 //插入功能,传参——线性表L、插入位置i和所插入元素x,成功返回1否则返回0 54 int ListInsert(SeqList *L,int i,DataType x) 55 { 56 int j; 57 if(L->size>=MaxSize-1) 58 { 59 printf("顺序表已满无法插入!\n"); 60 return 0; 61 } 62 else if(i<0||i>L->size+1) 63 { 64 printf("参数i不合法!\n"); 65 return 0; 66 } 67 else 68 { 69 for(j=L->size;j>i;j--) 70 { 71 L->list[j]=L->list[j-1]; //为插入做准备 72 } 73 L->list[i]=x; //插入 74 L->size++; //元素个数加1 75 return 1; 76 } 77 } 78 79 //删除功能,传参——顺序表L、删除元素的序号i和要返回所删除的元素 80 int ListDelete(SeqList *L,int i,DataType *x) 81 { 82 int j; 83 if(L->size==0) 84 { 85 printf("顺序表已空无数据元素可删!\n"); 86 return 0; 87 } 88 else if(i<0||i>L->size-1) 89 { 90 printf("参数i不合法!\n"); 91 return 0; 92 } 93 else 94 { 95 *x=L->list[i]; 96 for(j=i+1;j<L->size;j++) 97 { 98 L->list[j-1]=L->list[j]; 99 } 100 L->size--; 101 102 return 1; 103 } 104 } 105 106 void ListShow(SeqList L) 107 { 108 int i; 109 110 printf("当前List表为\n"); 111 for(i=0;i<L.size;i++) 112 { 113 printf("%d ",L.list[i]); 114 } 115 printf("\n共%d个元素\n\n",L.size); 116 117 return ; 118 } 119 120 main() 121 { 122 123 int i; 124 SeqList L; 125 DataType x; 126 127 //初始化顺序表L 128 ListInitiate(&L); 129 //初始化顺序表数据为0-49 130 CreList(&L); 131 132 //显示链表 133 ListShow(L); 134 135 //删除操作 136 printf("1.删除20位置元素\n"); 137 ListDelete(&L,20,&x); 138 printf("所删除元素为:%d\n",x); 139 ListShow(L); 140 141 //增加操作 142 printf("2.在1位置插入元素10\n"); 143 ListInsert(&L,1,10); 144 ListShow(L); 145 146 //查询操作 147 printf("3.查询30在链表中的位置:%d\n",ListLocate(L,30)); 148 printf("\n"); 149 printf("4.查询20(已删除)在链表中的位置:%d\n",ListLocate(L,20)); 150 151 return 0; 152 }
运行结果
To be continued ,
learning...(Date:2016-01-10)
原文:http://www.cnblogs.com/Ambrose/p/5118826.html