?? linklist.cpp
字號:
#include <iostream>
using namespace std;
typedef char ElemType;
typedef struct LNode //定義存儲結構
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
int initlist(LinkList &L)
{
LinkList s;
s=new LNode;if(!s)return 0; //定義一個頭節點
L=s;s->next=NULL;
return 0;
}
int doing(LinkList Q); //預定義選擇函數
int length(LinkList L);
int readin(LinkList &L) //讀入數據
{
cout<<"請輸入入鏈長度"<<endl;
int l;cin>>l;
if(l<=0) //判斷 l 是否合法
{
cout<<"參數有誤"<<endl;
doing(L);
}
cout<<"請輸入元素"<<endl;
char a;
LinkList s,p;
p=L;
for(int i=1;i<=l;i++)
{
cin>>a;
s=new LNode;
s->data=a;
s->next=NULL;
p->next=s; p=s;
}
return 0;
}
int readout(LinkList L) //讀出數據
{
if(length(L)==0)exit(1); //判空
LinkList p;
for(p=L->next;p->next!=NULL;p=p->next)
{cout<<p->data<<" ";}
cout<<p->data ;
return 0;
}
int length(LinkList L) //求長度
{
LinkList p;int i;
p=L;
for(i=0;p->next!=NULL;i++)
{p=p->next;}
return i;
}
char getelme(LinkList L,int i) //取指定的元素
{
if(i<0||i>length(L)) //判斷 i是否合法
{
cout<<"參數有誤"<<endl;
exit(1);
}
LinkList p=L;
int j;
for(j=1;j<=i;j++)
{p=p->next ;}
return p->data;
}
int exchang(LinkList L,int i,char k) //修改指定的元素
{
if(i<0||i>length(L)) //判斷 i是否合法
{
cout<<"參數有誤"<<endl;
doing(L); //回到選擇函數
}
LinkList p=L;
int j;
for(j=1;j<=i;j++)
{p=p->next ;}
p->data=k;
return 0;
}
int insert(LinkList &L,int i,ElemType k) //在指定的位置插入數據
{
if(i<0||i>length(L)) //判斷 i是否合法
{
cout<<"參數有誤"<<endl;
doing(L); //回到選擇函數
}
LinkList p=L;
LinkList s;
int j;
for(j=1;j<i;j++)
{p=p->next ;}
s=new LNode;
s->data=k;
s->next=p->next;
p->next=s;
return 0;
}
int delelem(LinkList &L,int i) //在指定的位置刪除數據
{
if(i<0||i>length(L)) //判斷 i是否合法
{
cout<<"參數有誤"<<endl;
doing(L); //回到選擇函數
}
LinkList s,p=L;
int j;
for(j=1;j<i;j++)
{p=p->next ;}
s=p->next;
p->next =p->next ->next ;
delete s;
return 0;
}
int doing(LinkList Q) //功能選擇函數
{
cout<<"--------------------請選擇單鏈表操作-----------------"<<endl;
cout<<"1.讀入元素(初始化只能執行一次,否則前一次被覆蓋) "<<endl;
cout<<"2.讀出所有鏈表元素 "<<endl;
cout<<"3.求鏈表長度 4.在指定位置取元素"<<endl;
cout<<"5.在指定位置修改元素 6.在指定位置插入元素"<<endl;
cout<<"7.在指定位置刪除元素 "<<endl;
int a;cin>>a;char b;int i;
switch (a)
{
case 1:readin(Q);break;
case 2:cout<<readout(Q)<<endl;break;
case 3:cout<<length(Q)<<endl;;break;
case 4:
{
cout<<"請輸入位置"<<endl;
cin>>i;
cout<<"在"<<i<<"處的是"<<getelme(Q,i)<<endl;
};break;
case 5:
{
cout<<"請輸入修改的位置"<<endl;
cin>>i;
cout<<"請輸入修改成的數據"<<endl;
cin>>b;
exchang(Q,i,b) ;
}break;
case 6:
{
cout<<"請輸入插入的位置"<<endl;
cin>>i;
cout<<"請輸入插入的數據"<<endl;
cin>>b;
insert(Q,i,b) ;
}break;
case 7:
{
cout<<"請輸入刪除的位置"<<endl;
cin>>i;
delelem(Q,i);
}break;
default:cout<<"沒有這個操作"<<endl;
}
cout<<"繼續Y/N";
char d;cin>>d;
if (d=='y'||d=='Y')doing(Q); //繼續操作
return 0;
}
int main()
{
LinkList Q;
initlist(Q);
doing(Q);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -