頭檔案:
#include <iostream>
using namespace std;
template<class T>
class Singlenode
{
public:
T data;//資料域
Singlenode<T>*next;//指標域
Singlenode()//構造空節點,但不初始化資料域
{
this->next=NULL;
}
Singlenode(T data,Singlenode<T>*next=NULL)//構造資料節點
{this->data=https://bbs.csdn.net/topics/data;
this->next=next;
}
};
cpp檔案:
//撰寫類及成員函式,實作輸入一組元素,建立一個帶頭結點的單鏈表;對該鏈表進行非遞減排序;
//實作在非遞減有序鏈表中洗掉值為x的結點;
#include <iostream>
#include"Singlenode1.h"
using namespace std;
template<class T>
class Singlelinklist//創建一個單鏈表類
{public:
Singlenode<T>*head;//頭指標
Singlelinklist();//構造空表
Singlelinklist(int value[],int n);//構造單鏈表
~Singlelinklist();
bool isempty();//判空
int getlength();//求長度
void sort();//排序
void deleteelem(int );//洗掉特定元素
void clearlist();//清空鏈表
void display();
} ;
template<class T>
Singlelinklist<T>::Singlelinklist()//構造空表
{this->head=NULL;
}
template<class T>
Singlelinklist<T>::Singlelinklist(int value[],int n)//構造單鏈表
{ head=NULL;
if(n>0)
{
head=new Singlenode<T>(value [0]);
Singlenode<T>*rear=head;//rear是尾指標
int i=1;
while(i<n)
{
rear->next=new Singlenode<T>(value [i++]);
rear=rear->next;
}
}
}
template<class T>//析構
Singlelinklist<T>::~Singlelinklist()
{clearlist();
}
template<class T>//判空
bool Singlelinklist<T>::isempty()
{return head==NULL;
}
template<class T>
void Singlelinklist<T>::clearlist()//清空鏈表
{Singlenode<T> *p=head;
while(p)
{
Singlenode<T>*q=p;
p=p->next;
delete q;
}
head=NULL;
}
template<class T>
int Singlelinklist<T>::getlength()//求長
{Singlenode<T> *p=head;
int i=0;
while(p!=NULL){
p=p->next;
i++;
}
return i;
}
template<class T>
void Singlelinklist<T>::sort()//非遞減排序
{Singlenode<T> *p=head;
int t;
Singlenode<T>*q;
for(;p;p=p->next){
for(q=p->next;q;q=q->next)
{if(q->data<p->data)
t=p->data,p->data=https://bbs.csdn.net/topics/q->data,q->data=t;
}
} }
template<class T>
void Singlelinklist<T>::deleteelem(int x)//洗掉節點
{Singlenode<T> *p=head;
Singlenode<T> *q;
while(p!=NULL){
if(p->data=https://bbs.csdn.net/topics/=x){
q=p;p=p->next;delete q;
}else p=p->next;}
}
template<class T>
void Singlelinklist<T>::display() {
Singlenode<T>*p=head;
for(;p;p=p->next){
cout<<p->data<<" ";
}
cout<<endl;
}
int main() {
int n,x;
int value[100];
cout<<"請輸入鏈表元素數目:"<<endl;
cin>>n;
cout<<"請依次輸入鏈表元素:"<<endl;
for(int i=0;i<n;i++){
cin >>value[i];
}
Singlelinklist<int> T1( value, n);
if(T1.isempty()){
cout<<"鏈表為空!程式結束!"<<endl;return 0;}
cout<<"鏈表為:"<<endl;
T1.display();
cout<<"鏈表長度為:"<<T1.getlength()<<endl;
T1.sort();
cout<<"排序鏈表為:"<<endl;
T1.display();
cout<<"請輸入要洗掉的值,我們將洗掉所有與之相等的值。"<<endl;
cin>>x;
T1.deleteelem(x);
cout<<"鏈表為:"<<endl;
T1.display();
T1.~Singlelinklist();
return 0;
}
然后遇到訪問權限沖突:
顯示報錯為0xDDDDDDDD
弄了一晚上,實在搞不動了 我還是個孩子,為什么這代碼這么殘忍
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20641.html
標籤:基礎類
下一篇:N皇后問題
