#include<iostream>
#include<iomanip>
using namespace std;
#define Max 50
#define Elemtype int
struct List{int length;Elemtype *data[Max];List(){length=0;};};
int Insert_list(List &L,Elemtype &a); //將a元素指標插入到線性表內
int Cout_list(List&L); //將L中的元素輸出
int Delete_list_x(List&L,Elemtype &x); //洗掉L中值為x的元素
int Insert_list(List &L,Elemtype &a)
{
L.data[L.length]=&a;
L.length++;
return 0;
};
int Cout_list(List&L)
{
for(int i=0;i<L.length;i++)cout<<setw(3)<<i<<" "<<*L.data[i]<<endl;
return 0;
};
int Delete_list_x(List&L,Elemtype&x)
{
int k=0;
for(int i=0;i<L.length;i++)
{ if(*L.data[i]!=x)
*L.data[k++]=*L.data[i];
}
L.length=k;
return 0;
};
int main()
{
List A;
int a[10]={1,2,3,8,4,2,7,9,5,12};
for(int i=0;i<10;i++)
Insert_list(A,a[i]);
Cout_list(A);
int b=2; //那么問題來了
Delete_list_x(A,b); //b換成a[1]
cout<<endl;
Cout_list(A);
int ao=0;while(1){cout<<"************"<<endl;cin>>ao;if(ao)return 0;}; //就不讓這逼閃退
}
將main中有注釋的Delete那行改成a[1]后運行結果就不大對了,
如圖
改前 https://img.uj5u.com/2020/09/21/112831210127592.png
改后 https://img.uj5u.com/2020/09/21/112831210127591.png
uj5u.com熱心網友回復:
這是換后結果
這是換前結果怎么會這樣子啊
uj5u.com熱心網友回復:
傳入Insert_list()的第二個引數b=2:與a[1]=2好像沒有什么實質性的區別的吧uj5u.com熱心網友回復:
又參考又指標的~…………你Delete_list_x其實就是把元素往前挪,也就可能變成原先的a[0] ----->指向了現在的a[1], a[1]----->a[2] ,而你這個正是如此,把2移除后,a[1]----->a[2],由于你傳入的是參考,導致實際傳入的陣列的a[1]也變成了a[2]== 3,所以結果肯定不正確了。參考指標雖好,但也得用得好才能說好~~~~否則就是各種坑,然后~~~~~~~轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93052.html
標籤:基礎類
下一篇:過濾敏感詞用什么演算法?
