1. //链表的使用
  2.  
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<string.h>
  7.  
  8. //定义链表结构体
  9. struct LinkCode{
  10. int num;
  11. char sname[];
  12. struct LinkCode * linknext;
  13. };
  14.  
  15. //静态链表
  16. void Linkone(){
  17. struct LinkCode n1, n2, n3, n4, n5;
  18. struct LinkCode * head = NULL;
  19. //初始化变量
  20. n1.num = ;
  21. sprintf(n1.sname, "小明");
  22. n1.linknext = &n2;
  23.  
  24. n2.num = ;
  25. sprintf(n2.sname, "小红");
  26. n2.linknext = &n3;
  27.  
  28. n3.num = ;
  29. sprintf(n3.sname, "小芳");
  30. n3.linknext = &n4;
  31.  
  32. n4.num = ;
  33. sprintf(n4.sname, "小刚");
  34. n4.linknext = &n5;
  35.  
  36. n5.num = ;
  37. sprintf(n5.sname, "小志");
  38. n5.linknext = NULL;
  39.  
  40. printf("\n==========静态链表============\n");
  41.  
  42. //循环遍历----查询
  43. printf("\n==========查询============\n");
  44. for (head = &n1; head!= NULL; head = head->linknext)
  45. {
  46. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  47. }
  48.  
  49. //增加
  50. printf("\n==========增加============\n");
  51. struct LinkCode n6;
  52. n6.num = ;
  53. sprintf(n6.sname, "小雨");
  54.  
  55. struct LinkCode n7;
  56. n7.num = ;
  57. sprintf(n7.sname, "小丽");
  58.  
  59. //情景1,插入末尾
  60. printf("\n==========增加到末尾============\n");
  61. n5.linknext = &n6;
  62. n6.linknext = NULL;
  63. //循环遍历----查询
  64. for (head = &n1; head != NULL; head = head->linknext)
  65. {
  66. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  67. }
  68.  
  69. //情景2,插入到中间2后面
  70. printf("\n==========增加到中间============\n");
  71. struct LinkCode *px=NULL;
  72. for (head = &n1; head != NULL; head = head->linknext)
  73. {
  74. //注意for循环的执行顺序
  75. if (head->num==)
  76. {
  77. px = head->linknext;
  78. head->linknext = &n7;
  79. n7.linknext = px;
  80. }
  81. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  82. }
  83.  
  84. //修改
  85. printf("\n==========修改============\n");
  86. //把小红的num修改成99
  87. for (head = &n1; head != NULL; head = head->linknext)
  88. {
  89. //strcmp()函数 串比较 str1>str2,返回值 > 0;两串相等,返回0
  90. if (!strcmp(head->sname,"小红"))
  91. {
  92. head->num = ;
  93. }
  94. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  95. }
  96.  
  97. //删除
  98. printf("\n==========删除============\n");
  99. //删除num是7的节点
  100. for (head = &n1; head != NULL; head = head->linknext)
  101. {
  102. if (head->num==)
  103. {
  104. //找到该节点的地址,再次重新开始循环遍历
  105. px = head;
  106. }
  107. }
  108.  
  109. for (head = &n1; head != NULL; head = head->linknext)
  110. {
  111. if (head->linknext==px)
  112. {
  113. //找到要删除节点的上一个节点
  114. head->linknext = px->linknext;
  115. }
  116. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  117. }
  118.  
  119. printf("\n");
  120. }
  121.  
  122. //动态链表
  123. void LinkTwo(){
  124. struct LinkCode * head, *p1, *p2, *p3, *p4, *p5;
  125. head = p1 = p2 = p3 = p4 = p5 = NULL;
  126. //先分配内存
  127. p1 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  128. p2 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  129. p3 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  130. p4 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  131. p5 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  132.  
  133. p1->num = ;
  134. sprintf(p1->sname, "小明1");
  135. p1->linknext = p2;
  136.  
  137. p2->num = ;
  138. sprintf(p2->sname, "小红1");
  139. p2->linknext = p3;
  140.  
  141. p3->num = ;
  142. sprintf(p3->sname, "小芳1");
  143. p3->linknext = p4;
  144.  
  145. p4->num = ;
  146. sprintf(p4->sname, "小刚1");
  147. p4->linknext = p5;
  148.  
  149. p5->num = ;
  150. sprintf(p5->sname, "小志1");
  151. p5->linknext = NULL;
  152.  
  153. printf("\n==========查询============\n");
  154. //循环打印
  155. for (head = p1; head != NULL; head=head->linknext)
  156. {
  157. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  158. }
  159.  
  160. //增加
  161. printf("\n==========增加============\n");
  162.  
  163. struct LinkCode *p6 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  164. struct LinkCode *p7 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  165.  
  166. p6->num = ;
  167. sprintf(p6->sname, "小雨1");
  168. p6->linknext = NULL;
  169.  
  170. p7->num = ;
  171. sprintf(p7->sname, "小丽1");
  172. p7->linknext = NULL;
  173.  
  174. //情景1,在末尾追加
  175. p5->linknext = p6;
  176. printf("\n==========增加(在末尾追加)============\n");
  177. //循环打印
  178. for (head = p1; head != NULL; head = head->linknext)
  179. {
  180. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  181. }
  182.  
  183. printf("\n==========增加(在中间追加)============\n");
  184. struct LinkCode *py = NULL;
  185. //情景2,在中间追加(追加在小红后面)
  186. for (head = p1; head != NULL; head = head->linknext)
  187. {
  188. if (!strcmp(head->sname, "小红1"))
  189. {
  190. py = head->linknext;
  191. head->linknext = p7;
  192. p7->linknext = py;
  193. }
  194. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  195. }
  196.  
  197. //修改
  198. printf("\n==========修改============\n");
  199. p1->num = ;
  200. for (head = p1; head != NULL; head = head->linknext)
  201. {
  202. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  203. }
  204.  
  205. //删除
  206. printf("\n==========删除============\n");
  207. //删除节点num=4的节点
  208. for (head = p1; head != NULL; head = head->linknext)
  209. {
  210. if (head->num==)
  211. {
  212. //找到要删除的节点
  213. py = head;
  214. }
  215. }
  216. for (head = p1; head != NULL; head = head->linknext)
  217. {
  218. if (head->linknext==py)
  219. {
  220. head->linknext = py->linknext;
  221. free(py);
  222. //注意:动态链表的删除和静态链表的删除不同,静态链表创建是在栈中,而动态链表是用malloc()函数创建
  223. //所以动态链表在堆中,想要删除必须程序员手动用free()函数删除
  224. }
  225. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  226. }
  227.  
  228. printf("\n");
  229. }
  230.  
  231. //链表销毁
  232. void ClearLink(){
  233. printf("\n==========创建链表============\n");
  234. struct LinkCode * head, *p1, *p2, *p3, *p4, *p5;
  235. head = p1 = p2 = p3 = p4 = p5 = NULL;
  236. //先分配内存
  237. p1 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  238. p2 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  239. p3 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  240. p4 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  241. p5 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  242.  
  243. p1->num = ;
  244. sprintf(p1->sname, "小明1");
  245. p1->linknext = p2;
  246.  
  247. p2->num = ;
  248. sprintf(p2->sname, "小红1");
  249. p2->linknext = p3;
  250.  
  251. p3->num = ;
  252. sprintf(p3->sname, "小芳1");
  253. p3->linknext = p4;
  254.  
  255. p4->num = ;
  256. sprintf(p4->sname, "小刚1");
  257. p4->linknext = p5;
  258.  
  259. p5->num = ;
  260. sprintf(p5->sname, "小志1");
  261. p5->linknext = NULL;
  262.  
  263. printf("\n==========查询============\n");
  264. //循环打印
  265. for (head = p1; head != NULL; head = head->linknext)
  266. {
  267. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  268. }
  269.  
  270. //销毁链表(只要给我一个头结点的地址,我能够删除整个链表)
  271. printf("\n==========销毁链表============\n");
  272. //思路:一个个删除,保留第一个,删除第二个,把第三个重新连接成第二个
  273. struct LinkCode *pt = NULL;
  274. //循环打印
  275. while (p1->linknext!=NULL){
  276. //获取第二个的地址
  277. pt = p1->linknext;
  278. //把第三个的地址放到第一个后面
  279. p1->linknext = p1->linknext->linknext;
  280. //删除第二个
  281. free(pt);
  282. }
  283. //当p1->linknext!=NULL时,表示整个链表只剩下第一个了
  284. //循环打印
  285. for (head = p1; head != NULL; head = head->linknext)
  286. {
  287. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  288. }
  289. //此时再删除第一个
  290. free(head);
  291. printf("\n头结点的指针地址%x", head);
  292. }
  293.  
  294. //链表逆转
  295. void sort(){
  296. printf("\n==========创建链表============\n");
  297. struct LinkCode * head, *p1, *p2, *p3, *p4, *p5;
  298. head = p1 = p2 = p3 = p4 = p5 = NULL;
  299. //先分配内存
  300. p1 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  301. p2 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  302. p3 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  303. p4 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  304. p5 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  305.  
  306. p1->num = ;
  307. sprintf(p1->sname, "小明1");
  308. p1->linknext = p2;
  309.  
  310. p2->num = ;
  311. sprintf(p2->sname, "小红1");
  312. p2->linknext = p3;
  313.  
  314. p3->num = ;
  315. sprintf(p3->sname, "小芳1");
  316. p3->linknext = p4;
  317.  
  318. p4->num = ;
  319. sprintf(p4->sname, "小刚1");
  320. p4->linknext = p5;
  321.  
  322. p5->num = ;
  323. sprintf(p5->sname, "小志1");
  324. p5->linknext = NULL;
  325.  
  326. printf("\n==========查询============\n");
  327. //循环打印
  328. for (head = p1; head != NULL; head = head->linknext)
  329. {
  330. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  331. }
  332.  
  333. //链表逆转(只给头结点的地址)
  334. printf("\n==========链表逆转============\n");
  335. //思路;存储第一个的地址,让第一个的下一个是NULL,第二个的下一个是原来的第一个,第三个下一个是原来的第二个
  336. head = p1;
  337. struct LinkCode *px = head;//头结点
  338. struct LinkCode *py = head->linknext;//第二个节点
  339. struct LinkCode *pz = NULL;
  340. while (py!=NULL){
  341. pz = py->linknext;//第三个节点
  342. //开始逆转
  343. py->linknext = px;//将第二个节点的下个节点赋值为第一个节点的地址
  344. //开始将所有指针向前移动1位
  345. px = py;//将第一个节点向前移动1位(移动到第二个节点的位置)
  346. py = pz;//将第二个节点向前移动1位(移动到第三个节点的位置)
  347. //此时再次进入循环 pz = py->linknext; 这会将第三个节点的值变成第四个节点
  348. //当py->linknext==NULL(即pz =NULL)的时候;表明此时py已经是链表最后一个节点了,
  349. //那么py->linknext的值就必须是链表倒数第二个的地址,所以还需要再循环1次,给py->linknext赋值,
  350. //再次经过py = pz;此时py==NULL;
  351. }
  352. //这个时候原来的第一个节点的linknext属性的值还是第二个节点的地址,,这是错误的,应该置为空
  353. head->linknext = NULL;
  354. //此时px就是原来链表最后一个节点的地址,因为head必须是头结点并且链表已经逆转了,
  355. //所以head的值不能是原来的第一个节点,而应该是原来链表最后一个节点的地址
  356. head = px;
  357. //循环打印
  358. for (head; head != NULL; head = head->linknext)
  359. {
  360. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  361. }
  362.  
  363. }
  364.  
  365. //链表排序(方法1)
  366. //方法1:交换2个元素的位置
  367. //缺点:理解复杂,操作麻烦
  368. //链表的冒泡排序与数组有巨大区别
  369. //数组每个元素都可以单独确定,a[1]就是第二个元素
  370. //但是链表他的每个元素都是由他的上一个元素确定,不存在有多少个元素的概念,只是上一次可以找到下一个
  371. void Sort2(){
  372. printf("\n==========创建链表============\n");
  373. struct LinkCode * head, *p1, *p2, *p3, *p4, *p5;
  374. head = p1 = p2 = p3 = p4 = p5 = NULL;
  375. //先分配内存
  376. p1 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  377. p2 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  378. p3 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  379. p4 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  380. p5 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  381.  
  382. p1->num = ;
  383. sprintf(p1->sname, "小明1");
  384. p1->linknext = p2;
  385.  
  386. p2->num = ;
  387. sprintf(p2->sname, "小红1");
  388. p2->linknext = p3;
  389.  
  390. p3->num = ;
  391. sprintf(p3->sname, "小芳1");
  392. p3->linknext = p4;
  393.  
  394. p4->num = ;
  395. sprintf(p4->sname, "小刚1");
  396. p4->linknext = p5;
  397.  
  398. p5->num = ;
  399. sprintf(p5->sname, "小志1");
  400. p5->linknext = NULL;
  401.  
  402. printf("\n==========查询============\n");
  403. //循环打印
  404. for (head = p1; head != NULL; head = head->linknext)
  405. {
  406. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  407. }
  408.  
  409. //链表排序(只给头结点的地址)---由小到大
  410. printf("\n==========链表排序============\n");
  411. //思路;定义3个变量,因为链表无法通过当前元素获取上一个元素,所以只能用一个变量将上一个变量的地址记录下来
  412.  
  413. //px--代表第一个元素,py代表第二个元素,pz代表第三个元素
  414. //参与比较的是py与pz
  415. struct LinkCode * px, *py, *pz;
  416. //初始化指针,防止后面出错
  417. px = py = pz=NULL;
  418. //在比较链表前2个元素的时候,第一个元素没有上一个元素,所以px=py=head
  419. px =py= head=p1;
  420.  
  421. //冒泡排序,每循环一次,会将一个最大值移动到末尾,每移动一次,需要移动的元素就会少一个
  422. //一共5个元素,移动4次后,最大的元素都已经放到链表末尾
  423. int index = ;
  424. while (index){//外层循环
  425. //获取第三个元素的值
  426. pz = py->linknext;
  427. if (py->num>pz->num)
  428. {
  429. //如果第一个节点的num比第二个大,则要求交换位置
  430. //1.把第一个节点的下个节点属性赋值为第三个节点的地址
  431. //此时px是第一个元素
  432. px->linknext = pz;
  433. //2.把第二个节点的下个节点属性赋值为第四个节点的地址
  434. py->linknext = pz->linknext;
  435. //3.把第三个节点的下个节点属性赋值为第二个节点的地址
  436. pz->linknext = py;
  437. //第一组交换完成
  438. //4.将所有节点向前移动一位,这里px已经不是第一个元素了,他往前移动1位
  439. //因为要确定头结点的值,所以前2个元素的比较,必须单独提取出来
  440. head = px = pz;
  441. }
  442. do{
  443. pz = py->linknext;
  444. if (py->num>pz->num)
  445. {
  446. //如果第一个节点比第二个大,则要求交换位置
  447. //1.把第一个节点的下个节点属性赋值为第三个节点的地址
  448. px->linknext = pz;
  449. //2.把第二个节点的下个节点属性赋值为第四个节点的地址
  450. py->linknext = pz->linknext;
  451. //3.把第三个节点的下个节点属性赋值为第二个节点的地址
  452. pz->linknext = py;
  453. //第一组交换完成
  454. //4.将所有节点向前移动一位
  455. px = pz;
  456. }
  457. else{
  458. //如果大小顺序正确,3个元素都需要再向前移动1位;
  459. //把第二个元素赋值给原来第一个元素
  460. px = py;
  461. //把第三个元素赋值给原来第二个元素
  462. py = pz;
  463. }
  464. } while (py->linknext != NULL);//判断第三个元素是否是空
  465. //再次初始化
  466. //因为此时px,py,pz都已经移动到链表末尾
  467. px = py = head;
  468. pz = py->linknext;
  469. index--;
  470. }
  471.  
  472. //循环打印
  473. for (head; head != NULL; head = head->linknext)
  474. {
  475. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  476. }
  477.  
  478. }
  479.  
  480. //链表排序(方法2)
  481. //方法1:交换2个元素的内容,不改变链表节点的位置,只是内容的交换
  482. //优点:操作简单,通俗易懂
  483. void Sort3(){
  484. printf("\n==========创建链表============\n");
  485. struct LinkCode * head, *p1, *p2, *p3, *p4, *p5;
  486. head = p1 = p2 = p3 = p4 = p5 = NULL;
  487. //先分配内存
  488. p1 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  489. p2 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  490. p3 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  491. p4 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  492. p5 = (struct LinkCode *)malloc(sizeof(struct LinkCode));
  493.  
  494. p1->num = ;
  495. sprintf(p1->sname, "小明1");
  496. p1->linknext = p2;
  497.  
  498. p2->num = ;
  499. sprintf(p2->sname, "小红1");
  500. p2->linknext = p3;
  501.  
  502. p3->num = ;
  503. sprintf(p3->sname, "小芳1");
  504. p3->linknext = p4;
  505.  
  506. p4->num = ;
  507. sprintf(p4->sname, "小刚1");
  508. p4->linknext = p5;
  509.  
  510. p5->num = ;
  511. sprintf(p5->sname, "小志1");
  512. p5->linknext = NULL;
  513.  
  514. printf("\n==========查询============\n");
  515. //循环打印
  516. for (head = p1; head != NULL; head = head->linknext)
  517. {
  518. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  519. }
  520.  
  521. //链表排序(只给头结点的地址)---由小到大
  522. printf("\n==========链表排序============\n");
  523.  
  524. struct LinkCode *px = NULL;
  525. struct LinkCode *py = NULL;
  526. struct LinkCode sz;
  527.  
  528. for (px = head = p1; px != NULL; px = px->linknext)
  529. {
  530. for (py = head = p1; py != NULL; py = py->linknext)
  531. {
  532. //双循环
  533. //外循环的一个元素跟其他5个元素相比较,只要px<py就会发生交换
  534. //导致当2是最小元素的时候,他必须先跟前面比他大的所有元素,把自己变成最大,并非单单与最大元素进行交换
  535. //也就是小元素会不断的被推到最前面
  536. if (px->num<py->num)
  537. {
  538. sz.num = px->num;
  539. px->num = py->num;
  540. py->num = sz.num;
  541.  
  542. sprintf(sz.sname, px->sname);
  543. sprintf(px->sname, py->sname);
  544. sprintf(py->sname, sz.sname);
  545. }
  546. }
  547. }
  548. //循环打印
  549. for (head = p1; head != NULL; head = head->linknext)
  550. {
  551. printf("\nnum=%d,sname=%s,linknext=%x", head->num, head->sname, head->linknext);
  552. }
  553.  
  554. }
  555.  
  556. void main(){
  557. //Linkone();
  558. //LinkTwo();
  559. //ClearLink();
  560. //sort();
  561. //Sort2();
  562. Sort3();
  563.  
  564. system("pause");
  565. }

C语言 链表的使用(链表的增删查改,链表逆转,链表排序)的更多相关文章

  1. DataGridView绑定泛型List时,利用BindingList来实现增删查改

    DataGridView绑定泛型List时,利用BindingList来实现增删查改  一.   DataGridView绑定泛型List的种种 1.DataGridView数据绑定对比(DataTa ...

  2. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  3. 8天学通MongoDB——第二天 细说增删查改

    原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/19/2357846.html 看过上一篇,相信大家都会知道如何开启mongodb了 ...

  4. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  5. 在MVC中使用泛型仓储模式和依赖注入实现增删查改

    标签: 原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository ...

  6. golang使用json格式实现增删查改

    需求和思路 在一般的小项目或者一个小软件,例如客户端之类的小程序中,可能会需要数据的持久化.但是使用一般的数据库(Mysql)之类的不合适.使用sqlite3这种嵌入式的是个较好的方法,但是Go语言中 ...

  7. 学习记录——使用PHP实现数据增删查改等基本功能(前后端分离)

    萌新初次学习服务器端语言,分享学习经验 实现功能:1.显示数据表    2.对数据进行分页    3.对数据进行增删查改 由于本萌新采用前后端完全分离方案,所以数据传输用的ajax,为了提高代码的复用 ...

  8. 3.EF 6.0 Code-First实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...

  9. 4.在MVC中使用仓储模式进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...

  10. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

随机推荐

  1. 【转】Android 语言切换过程分析

    最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog. ...

  2. Android表单UI及相应控件的事件处理

    一.Toast Toast是一种轻量级的提示工具,可显示一行文本对用户的操作进行提示响应 用法:Toast.makeText(context,text,time).show(); context:上下 ...

  3. 异步get请求之Block方法

    #import "ViewController.h" #import "Header.h" @interface ViewController ()<NS ...

  4. OC中结构体作为对象属性

    在OC中结构体有时候也作为对象的属性 类的定义 #import <Foundation/Foundation.h> typedef struct{ int year; int month; ...

  5. JSPatch一些容易犯错的地方

    JSPatch一些自己使用后的发现: 1.JS不区分整数和浮点数.解析字典以后的value不需要通过 floatValue等方法转换,而是自动就转换成对应的数据类型. 2.nil在JSPatch中 不 ...

  6. poj邮局1160

    题目是给出V个村庄,取出P个做为邮局,要求每个村庄到邮局的距离和最小. 先考虑只有一个邮局的情况,不管你怎么放邮局和最小的情况总是在中点的位置. 再来考虑P>1的情况: 假设P-1个邮局已经选好 ...

  7. System Center的一些资料收集

    MS 的 system center 中文首页 http://www.microsoft.com/zh-cn/server-cloud/system-center/default.aspx 英文首页 ...

  8. PS网页设计教程XXIV——从头设计一个漂亮的网站

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  9. 在Jena框架下基于MySQL数据库实现本体的存取操作

    在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...

  10. ETL from hadoop to vertica

    根据项目需要,我做了一个POC(proof of concept),XML TXT的数据从HADOOP 引入到VERTICA. 我采用的方案是pig,具体信息可以参加vertica官方的文档. Acc ...