鱼C论坛

 找回密码
 立即注册
查看: 3259|回复: 3

数据结构小结

[复制链接]
发表于 2013-4-27 20:20:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define ERROR 0
  5. #define TRUE 1
  6. #define OK 1
  7. #define FALSE 0

  8. typedef int ElemType;
  9. typedef int Status;


  10. typedef struct Node
  11. {
  12. ElemType data; //&Ecirc;&yacute;&frac34;&Yacute;&Oacute;ò
  13. struct Node* next; //&Ouml;&cedil;&Otilde;&euml;&Oacute;ò
  14. } Node ;

  15. typedef struct Node* LinkList; /*定义LinkList*/

  16. Status visit(ElemType c)
  17. {
  18. printf("%d", c);
  19. return OK;
  20. }

  21. /*初始化顺序线性表*/
  22. Status InitList(LinkList* L)
  23. {
  24. *L = (LinkList)malloc(sizeof(Node)); /*产生头结点,并使L指向此头结点*/

  25. if (!(*L)) /*存储分配失败*/
  26. {
  27. return ERROR;
  28. }

  29. (*L)->next = NULL; /*指针域为空*/

  30. return OK;
  31. }

  32. /*初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数*/
  33. int ListLength(LinkList L)
  34. {
  35. int i = 0;
  36. LinkList p = L->next; /* p指向第一个结点*/

  37. while (p)
  38. {
  39. i++;
  40. p = p->next;
  41. }

  42. return i;
  43. }

  44. /*初始条件:顺序纯属表L已存在*/
  45. /*操作结果:依次对L的每个数据元素输出*/
  46. Status ListTraverse(LinkList L)
  47. {
  48. LinkList p = L->next;

  49. while (p)
  50. {
  51. visit(p->data);
  52. p = p->next;
  53. }

  54. printf("\n");

  55. return OK;
  56. }

  57. /*随机产生n个元素的值,建立带头结点的单链表线性表L (尾插法)*/
  58. void CreateListTail(LinkList* L, int n)
  59. {
  60. LinkList p, r;
  61. int i;

  62. srand(time(0)); /*初始化随机数种子*/
  63. *L = (LinkList)malloc(sizeof(Node)); /*L为整个线性表*/
  64. r = *L /*r为指向尾部结点*/


  65. for(i=0; i<n; i++)
  66. {

  67. p = (Node*)malloc(sizeof(Node)); /*生成新结点*/
  68. p->data = rand() % 100 + 1; /*随机生成100以内的数字*/
  69. r->next = p; /*将表尾终端点的指针指向新结点*/
  70. r = p; /*将当前的新结点定义为表尾终端结点*/
  71. }

  72. r->next = NULL; /*表示当前链表结点*/
  73. //创建有环链表
  74. //r->next=p;
  75. }

  76. Status GetMidNode(LinkList L, ElemType* e)
  77. {
  78. LinkList search, mid;
  79. mid = search = L;

  80. while (search->next != NULL)
  81. {
  82. //search移动的速度是 mid的2倍
  83. if (search->next->next != NULL)
  84. {
  85. search = search->next->next;
  86. mid = mid->next;
  87. }
  88. else
  89. {
  90. search = search->next;
  91. }
  92. }

  93. *e = mid->data;

  94. return OK;
  95. }

  96. /*
  97. int CreateListHead(LinkList *L, int n)
  98. {
  99. LinkList p,r;
  100. int i=1;

  101. srand(time(0)); //初始化随机种子

  102. (*L) = (LinkList)malloc(sizeof(struct Node)); //先建立一个带头结点的单链表

  103. if((*L) == NULL)

  104. {

  105. fprintf(stderr, "malloc() error.\n");

  106. return ERROR;

  107. }

  108. (*L)->next = NULL;




  109. r=*L; //尾部结点

  110. for(i=0; i<n; i++)
  111. {
  112. p=(Node *) malloc(sizeof(Node));
  113. p->data=rand()%100+1;
  114. r->next =p;
  115. r=p;
  116. }

  117. r->next = NULL; //表示当前链表结束



  118. return OK;




  119. }

  120. int ClearList(LinkList *L)
  121. {
  122. LinkList p,q;

  123. p=(*L)->next;

  124. while(p)
  125. {
  126. q=p->next;
  127. free(p);
  128. p=q;
  129. }

  130. (*L)->next=NULL;

  131. return OK;
  132. }

  133. int printList(LinkList L)

  134. {

  135. LinkList p;

  136. p = L->next;

  137. if(p == NULL)

  138. {

  139. printf("链表为空.\n");

  140. return ERROR;

  141. }

  142. while(p)

  143. {

  144. printf("%d ", p->data);

  145. p = p->next;

  146. }

  147. printf("\n");



  148. return OK;

  149. }
  150. */

  151. int main()
  152. {
  153. LinkList L;
  154. Status i;
  155. char opp;
  156. ElemType e;
  157. int find;
  158. int tmp;

  159. i = InitList(&L);
  160. printf("初始化L后: ListLength(L)=%d\n", ListLength(L));
  161. while (opp != '0')
  162. {
  163. scanf("%c", &opp);
  164. switch (opp)
  165. {
  166. case '1':
  167. ListTraverse(L);
  168. printf("\n");
  169. break;

  170. case '2':
  171. CreateListTail(&L, 20);
  172. printf("整体创建L的元素(尾插法):\n");
  173. ListTraverse(L);
  174. printf("\n");
  175. break;

  176. case '3':
  177. //clearList(pHead); //清空链表
  178. printf("ListLength(L)=%d \n", ListLength(L));
  179. printf("\n");
  180. break;

  181. case '4':
  182. //GetNthNodeFromBack(L,find,&e);
  183. GetMidNode(L, &e);
  184. printf("链表中间结点的值为:%d\n", e);
  185. //ListTraverse(L);
  186. printf("\n");
  187. break;

  188. case '0':
  189. exit(0);
  190. }
  191. }
  192. /* printf("Hello world!\n");

  193. CreateListHead(&L,100);
  194. printList(L);

  195. */
  196. return 0;
  197. }
复制代码
    for(i=0; i<n; i++)
    {
        p = (Node*)malloc(sizeof(Node));  /*生成新结点*/
        p->data = rand() % 100 + 1;    /*随机生成100以内的数字*/
        r->next = p;          /*将表尾终端点的指针指向新结点*/
        r = p;                /*将当前的新结点定义为表尾终端结点*/
    }

for(i=0;i<n;i++)        也没有什么错误,怎么编译不通过?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-27 20:46:40 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-27 20:54:07 | 显示全部楼层
少个分号 ;   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-28 00:01:34 | 显示全部楼层
路过打酱油的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表