list.h 代碼:
/*
*Copyright (c) 2017,煙臺大學計算機與控制工程學院
*All rights reserved.
*文件名稱:
*作 者:陳軍正
*完成日期:2017年9月20日
*版 本 號:v1.0
*
*問題描述:刪除元素在[x,y]之間的所有元素,要求算法的時間複雜度爲O(n),空間複雜度爲O(1)刪除元素在[x,y]之間的所有元素,要求算法的時間複雜度爲O(n),空間複雜度爲O(1刪除元素在[x,y]之間的所有元素,要求算法的時間複雜度爲O(n),空間複雜度爲O(1刪除元素在[x,y]之間的所有元素,要求算法的時間複雜度爲O(n),空間複雜度爲O(1*
*/
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#define MaxSize 50
typedef struct
{
int data [MaxSize];
int length;
}SqList;
void CreateList(SqList *&,int [],int );
void DispList(SqList *&);
void Chanage (SqList *&L);
#endif // LIST_H_INCLUDED
#include <iostream>
#include "list.h"
using namespace std;
int main ()
{
int x[6] = {1,2,3,4,5,6};
SqList *sq;
CreateList(sq,x,6);
DispList(sq);
cout<<endl;
Chanage (sq);
DispList(sq);
return 0;
}
list.cpp 代碼:
#include "malloc.h"
#include "list.h"
#include <iostream>
using namespace std;
void CreateList(SqList *&L,int a[],int n)
{
int i;
L = (SqList *)malloc(sizeof(SqList));
for (i = 0;i<n;++i)
{
L->data[i] = a[i];
}
L->length = n;
}
void DispList(SqList *&L)
{
int i;
for(i=0;i<L->length;++i)
{
cout<<L->data[i]<<" ";
}
}
void Chanage (SqList *&L)
{
SqList *sq1;
sq1 = (SqList *)malloc(sizeof(SqList));
int i = 0,j = L->length-1,q=0;
while (i != L->length)
{
if (L->data[i]%2 == 0)
{
sq1->data[j] = L->data[i];
--j;
++i;
}
else
{
sq1->data[q] = L->data[i];
++i;
++q;
}
}
sq1->length = L->length;
L=sq1;
}
運行結果:
知識點總結:free()釋放的是指針指向的內存!注意!釋放的是內存,不是指針!指針並沒有被釋放,指針仍然指向原來的存儲空間。指針是一個變量,只有程序結束時才被銷燬。釋放了內存空間後,原來指向這塊空間的指針還是存在!只不過現在指針指向的內容的垃圾,是未定義的,所以說是垃圾。
野指針指指向一個已刪除的對象或未申請訪問受限內存區域的指針