malloc,realloc,calloc一直很头疼,这次笔试题需要在数组后重新分配新的空间的代码是:
//删除函数,删除ptr中的ptr[in]元素,n是数组原来的长度。 void rmv(int *ptr,int in,const unsigned int n) { unsigned int i; for (i=in; i<n-1; i++) { *(ptr+i)=*(ptr+i+1); } realloc(ptr,sizeof(int)*(n-1)); } ----------------------------------------------- //插入函数,在整形数组ptr中的ptr[in]之前插入x,n是原数组的长度 void rin(int *ptr,int in,int x,const unsigned int n) { unsigned int i; realloc(ptr,sizeof(int)*(n+1)); for (i=n; i>in; i--) { *(ptr+i)=*(ptr+i-1); } ptr[in]=x; } //需要包含stdlib.h头文件。
malloc分配空间之后需要free掉,以后得记住了。
附带删除一个单向链表的最中间元素,不能使用两次循环。
void delMiddle(link *head) { if(head == NULL) return; else if(head->next == NULL) { delete head; return; } else { link *low = head; link *fast = head->next; while(fast != NULL && fast->next != NULL) { fast = fast->next->next; if(fast == NULL) break; low = low->next; } link *temp = low->next; low->next = low->next->next; delete temp; } }