一直在复习数学,想着要在六月底之前把数学三门四本书都过一遍,最近看到了线性代数了,好多学了都忘记了,慢慢来吧!
前段时间看的线性表了,才看了一点点,关于顺序表大致实现了下,后面抽看看看数据结构了,数学得全力复习了。准备暑假开始系统复习专业课,加油吧!
顺序表代码如下,简单实现了下,正好抓住这个机会复习了结构体,指针等知识。main()函数里写的比较乱,主要在于其他子函数里的实现
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define LIST_SIZE 100 5 6 typedef int ElemType; 7 ElemType location; 8 9 typedef struct 10 { 11 int elem[LIST_SIZE]; 12 int length; 13 }SqList; 14 // 初始化顺序表 15 int InitList(SqList *L,int len) 16 { 17 L->length = len; 18 return 1; 19 } 20 // 输入顺序表中元素 21 int ScanList(SqList *L) 22 { 23 int i; 24 for(i = 0;i < L->length;i++) 25 { 26 scanf_s("%d",&L->elem[i]); 27 } 28 return 1; 29 } 30 // 遍历顺序表 31 void TraverseList(SqList *L) 32 { 33 int i; 34 for(i = 0;i < L->length;i++) 35 { 36 printf("%d ",L->elem[i]); 37 } 38 } 39 // 销毁顺序表 40 int DestoryList(SqList *L) 41 { 42 free(L->elem); 43 L->length = 0; 44 return 1; 45 } 46 // 清空顺序表 47 int ClearList(SqList *L) 48 { 49 L->length = 0; 50 return 1; 51 } 52 // 判断顺序表是否为空 53 int ListIsEmpty(SqList *L) 54 { 55 if(L->length == 0) 56 { 57 return 0; 58 }else 59 { 60 return 1; 61 } 62 } 63 // 按照下标查找顺序表中元素 64 int GetList(SqList *L, int i) 65 { 66 if(i < 0||i > L->length) 67 { 68 return 0; 69 }else 70 { 71 return 1; 72 } 73 } 74 // 查找元素的位置 75 int LocatList(SqList *L, ElemType e) 76 { 77 int i = 0; 78 for(i = 0;i < L->length;i++) 79 { 80 if(L->elem[i] == e) 81 { 82 location = i; 83 return 1; 84 } 85 } 86 return 0; 87 } 88 // 插入元素 89 int InsertList(SqList *L,int n) 90 { 91 int *p,*q; 92 93 if(L->length == 0) 94 { 95 L->elem[0] = n; 96 ++L->length; 97 } 98 q = &(L->elem[0]); 99 while ((*q <= n)&&(q <= &(L->elem[L->length - 1]))) 100 { 101 ++q; 102 } 103 ++L->length; 104 for(p = &(L->elem[L->length -1]);p >= q;--p) 105 { 106 *(p + 1) = *p; 107 *p = n; 108 } 109 110 return 0; 111 } 112 // 删除元素 113 int DeleteList(SqList *L,int n) 114 { 115 int *p, *q; 116 q = &(L->elem[0]); 117 while ((*q < n)&&(q < &(L->elem[L->length - 1]))) 118 { 119 ++q; 120 } 121 for(p = &(L->elem[L->length - 1]);p >= q;++q) 122 { 123 *q = *(q + 1); 124 } 125 --L->length; 126 return 0; 127 } 128 129 int main() 130 { 131 int i; 132 int lengthOfNew; 133 int search; 134 int insertNum; 135 int deleteNum; 136 SqList L; 137 printf("请输入顺序表长度:\n"); 138 scanf_s("%d",&lengthOfNew); 139 if(InitList(&L,lengthOfNew)) 140 { 141 printf("顺序表建立完成\n"); 142 } 143 printf("输入顺序表中的元素:\n"); 144 ScanList(&L); 145 printf("\n"); 146 printf("顺序表中元素为:\n"); 147 TraverseList(&L); 148 printf("\n"); 149 printf("输入元素下标进行查找:\n"); 150 scanf_s("%d",&i); 151 if(!GetList(&L,i)) 152 { 153 printf("越界\n"); 154 }else 155 { 156 printf("查找的元素为:%d\n",L.elem[i-1]); 157 } 158 printf("请输入需要查找的元素:\n"); 159 scanf_s("%d",&search); 160 if(LocatList(&L,search)) 161 { 162 printf("查找的元素位置为:%d\n",location + 1); 163 }else 164 { 165 printf("没有查找到该元素!\n"); 166 } 167 printf("输入要插入的元素:\n"); 168 scanf_s("%d",&insertNum); 169 InsertList(&L, insertNum); 170 TraverseList(&L); 171 printf("\n"); 172 printf("输入要删除的元素:\n"); 173 scanf_s("%d",&deleteNum); 174 DeleteList(&L, deleteNum); 175 TraverseList(&L); 176 printf("\n"); 177 system("pause"); 178 return 0; 179 }