#include <iostream>
using namespace std;
typedef int DataType;
struct Head //Node為結點型別名
{
DataType data; //data代表資料元素
struct Head *next; //next為指向下一結點的指標
};
//初始化單鏈表
int InitList (Head *H)
{ //H為指向單鏈表的頭指標
H=new Head; //分配空間,作為頭結點
if(!H)
{
cout<<"初始化錯誤"<<endl;
return 0;
}
H->next=NULL;
return 1;
}
//判表空
int ListEmpty(Head * H){
if(H->next==NULL) return true;
else return false;
}
//求線性表的長度
int Listlength(Head *H){
int n=0;
Head *p=H;
while (p->next!=NULL)
{
n++;
p=p->next;
}
return (n);
}
//回傳第一個與指定值匹配的元素位置
int Find_item(Head * H, DataType item)
{
Head *p=H->next;
int pos=0;
while(p)
{
pos++;
if(p->data=https://bbs.csdn.net/topics/=item) break;
p=p->next;
}
if(p) return pos;
else return 0;
}
//獲取單鏈表中指定位置上的資料元素
int Find_pos(Head *H, int pos, DataType item)
{
Head *p=H->next;
int i=0;
while (p && i!=pos)
{
p=p->next; i++;
}
if(p==NULL)
{
cout<<"位置無效"<<endl;
return 0;
}
item=p->data;
return 1;
}
//向線性表指定位置插入一個新元素
int ListInsert (Head *H , int pos, DataType item)
{
Head *p=H; int i=0;
while( p ){ //查找pos的前驅
if(i+1==pos) break;
p=p->next; i++;
}
if(p==NULL){ //查找不成功,退出運行
cout<<"插入位置無效"<<endl;
return 0;
}
Head *t=new Head; t->data=https://bbs.csdn.net/topics/item;
t->next=p->next;
p->next=t;
return 1;
}
//遍歷單鏈表
void TraverseList(Head * H)
{ //H為指向單鏈表的頭指標
Head *p=H->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//從線性表中洗掉第一個與指定值匹配的元素
int ListDelete (Head *H, DataType item)
{
Head *p=H, *t; int i=0;
while( p->next ){ //查找pos的前驅
if(p->next->data=https://bbs.csdn.net/topics/=item) break;
p=p->next;
}
if(p->next==NULL){ //查找不成功,退出運行
cout<<"洗掉元素不存在"<<endl;
return 0;
}
t=p->next; //①t為被洗掉結點
p->next=t->next; //②洗掉t的鏈接關系
delete t; //③釋放被刪結點
return 1;
}
//撤銷單鏈表
void DestroyList (Head * &H)
{
Head *p;
while(H)
{
p=H;
H=H->next;
}
}
int main(){
Head str,*a;
a=&str;
DataType f,g;
int n,x;
InitList(a); //初始化鏈表
n= Listlength(a);//鏈表的長度
cin>>x;
cout<<"請輸入鏈表的元素, 以1結束"; //向鏈表中輸入元素,以1結束
while(x!=1){
ListInsert(a,n+1,x);
n++;
}
cin>>g;
Find_item(a,g);
n= ListEmpty(a);//判定單鏈表是否為空表:為慷訓傳1,否則回傳0
cout<<"當前鏈表長為:"<<Listlength(a);
cin>>f;
ListInsert (a , 3, f);
cout<<"在三號位插入f后,表中元素為:";
TraverseList(& str);
}
大家幫忙看下 初始化鏈表這樣做對不對,還有判斷鏈表是否為空的函式引數應該是些那個變數的指標?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/132761.html
標籤:基礎類
下一篇:關于C++語言編輯器問題哦
