当前位置:   article > 正文

寒假 day1

寒假 day1

1、请简述栈区和堆区的区别?

2、有一个整形数组:int arr[](数组的值由外部输入决定),一个整型变量: x(也
由外部输入决定)。要求:
1)删除数组中与x的值相等的元素
2)不得创建新的数组
3)最多只允许使用单层循环
4)无需考虑超出新数组长度后面的元素,所以,请返回新数组的长度
例如: (1,2,3,5,7,3,5,9) x=3
原数组的有效部分变为:1,2,5,7,5,9)

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. typedef int datatype;
  5. #define MAXSIZE 8
  6. enum num
  7. {
  8. FALSE=-1,
  9. SUCCESS
  10. };
  11. typedef struct List
  12. {
  13. datatype data[MAXSIZE];
  14. int len;
  15. }slist;
  16. slist* create()
  17. {
  18. slist *list=(slist*)malloc(sizeof(slist));
  19. if(list==NULL)
  20. return NULL;
  21. memset(list->data,0,sizeof(list->data));
  22. list->len=0;
  23. return list;
  24. }
  25. int full(slist *list)
  26. {
  27. return list->len==MAXSIZE?FALSE:SUCCESS;
  28. }
  29. int insert_rear(datatype element,slist *list)
  30. {
  31. if(NULL==list||full(list))
  32. return FALSE;
  33. list->data[list->len++]=element;
  34. return SUCCESS;
  35. }
  36. int empty(slist*list)
  37. {
  38. return list->len==0?FALSE:SUCCESS;
  39. }
  40. int output(slist*list)
  41. {
  42. if(NULL==list||empty(list))
  43. return FALSE;
  44. for(int i=0;i<list->len;i++)
  45. {
  46. printf("%-5d",list->data[i]);
  47. }
  48. puts("");
  49. return SUCCESS;
  50. }
  51. void det_index(slist*list,int index)
  52. {
  53. if(NULL==list||empty(list)||index<0||index>list->len)
  54. return ;
  55. for(int i=index+1;i<list->len;i++)
  56. {
  57. list->data[i-1]=list->data[i];
  58. }
  59. list->len--;
  60. }
  61. void det_key(slist*list,datatype key)
  62. {
  63. if(NULL==list||empty(list))
  64. return ;
  65. for(int i=0;i<list->len-1;i++)
  66. {
  67. if(list->data[i]==key)
  68. {
  69. det_index(list,i);
  70. i--;
  71. }
  72. }
  73. }
  74. int main(int argc, const char *argv[])
  75. {
  76. slist *list=create();
  77. int arr[MAXSIZE];
  78. for(int i=0;i<MAXSIZE;i++)
  79. {
  80. printf("please enter %d element:",i+1);
  81. scanf("%d",&arr[i]);
  82. }
  83. int len=sizeof(arr)/sizeof(arr[0]);
  84. for(int i=0;i<len;i++)
  85. {
  86. int flag=insert_rear(arr[i],list);
  87. if(flag==FALSE)
  88. {
  89. puts("NULL or full");
  90. break;
  91. }
  92. }
  93. int key;
  94. printf("please enter det key:");
  95. scanf("%d",&key);
  96. det_key(list,key);
  97. output(list);
  98. return 0;
  99. }

3、请编程实现单链表的头插,头删、尾插、尾删

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. enum{FALSE=-1,SUCCESS};
  5. typedef int datatype;
  6. //定义节点结构体
  7. //节点:数据域、指针域
  8. typedef struct Node
  9. {
  10. //数据域:存储数据元素
  11. datatype data;
  12. //指针域:存储下一个节点的地址
  13. struct Node *next;
  14. }*Linklist;
  15. Linklist insert_head(Linklist head,datatype element);
  16. Linklist create();
  17. void output(Linklist head);
  18. Linklist insert_rear(Linklist head,datatype element);
  19. Linklist det_head(Linklist head);
  20. Linklist det_rear(Linklist head);
  21. int main(int argc, const char *argv[])
  22. {
  23. Linklist head=NULL;
  24. int n;
  25. datatype element;
  26. printf("please enter n;");
  27. scanf("%d",&n);
  28. for(int i=0;i<n;i++)
  29. {
  30. printf("please enter %d element:",i+1);
  31. scanf("%d",&element);
  32. // head=insert_head(head,element);//头插
  33. head=insert_rear(head,element);//尾插
  34. }
  35. //遍历
  36. output(head);
  37. //头删
  38. // head=det_head(head);
  39. // output(head);
  40. //尾删
  41. head=det_rear(head);
  42. output(head);
  43. return 0;
  44. }
  45. //创建新节点
  46. Linklist create()
  47. {
  48. Linklist s=(Linklist)malloc(sizeof(struct Node));
  49. if(NULL==s)
  50. return NULL;
  51. s->data=0;
  52. s->next=NULL;
  53. return s;
  54. }
  55. //头插入
  56. Linklist insert_head(Linklist head,datatype element)
  57. {
  58. //创建新节点
  59. Linklist s=create();
  60. s->data=element;
  61. //判断链表是否为空
  62. if(NULL==head)
  63. {
  64. head=s;
  65. }
  66. else
  67. {
  68. s->next=head;
  69. head=s;
  70. }
  71. return head;
  72. }
  73. //遍历输出
  74. void output(Linklist head)
  75. {
  76. //判断链表是否为空
  77. if(NULL==head)
  78. {
  79. puts("error");
  80. return;
  81. }
  82. //输出
  83. Linklist p=head;
  84. while(p!=NULL)
  85. {
  86. printf("%d ",p->data);
  87. p=p->next;//后移
  88. }
  89. puts("");
  90. }
  91. //尾插
  92. Linklist insert_rear(Linklist head,datatype element)
  93. {
  94. //创建新节点
  95. Linklist s=create();
  96. s->data=element;
  97. //判断链表是否为空
  98. if(NULL==head)
  99. {
  100. head=s;
  101. }
  102. else //存在多个链表
  103. {
  104. Linklist p=head;
  105. while(p->next!=NULL)
  106. {
  107. p=p->next;
  108. }
  109. p->next=s;
  110. }
  111. return head;
  112. }
  113. //头删
  114. Linklist det_head(Linklist head)
  115. {
  116. //判断链表是否为空
  117. if(NULL==head)
  118. return head;
  119. //存在多个节点 >=1
  120. Linklist del=head;
  121. head=head->next;
  122. free(del);
  123. del=NULL;
  124. return head;
  125. }
  126. //尾删
  127. Linklist det_rear(Linklist head)
  128. {
  129. //判断链表是否为空
  130. if(NULL==head)
  131. return head;
  132. //一个节点
  133. else if(head->next==NULL)
  134. {
  135. free(head);
  136. head=NULL;
  137. return head;
  138. }
  139. //多个节点 >=2
  140. else
  141. {
  142. Linklist del=head;
  143. while(del->next->next!=NULL)
  144. {
  145. del=del->next;
  146. }
  147. free(del->next);
  148. del->next=NULL;
  149. return head;
  150. }
  151. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/58655
推荐阅读
相关标签
  

闽ICP备14008679号