实验三 线性表操作
一、实验目的
1、掌握线性表的基本操作:插入、删除、查找。
2、掌握链表遍历器的使用方法。
二、实验内容
1、输入 n 个不为零的整数作为节点元素值,遇到 0 代表输入结束(不创 建元素值为 0 的节点),创建有序链表。输出整个链表。
2、输入一个整数,将该数插入到有序表相应位置。输出整个链表。
3、输入一个整数,在链表中进行搜索,输出其在链表中的位置。如果不 存在输出 0。
4、再一次输入一个整数,在链表中进行搜索,输出其在链表中的位置。 如果不存在输出 0。
5、再一次输入 n 个不为零的整数作为节点元素值,遇到 0 代表输入结束 (不创建元素值为 0 的节点),创建有序链表。输出整个链表。
6、使用链表遍历器实现上面两个有序链表的合并,输出合并后的链表。
7、提示:注意单节点链表的测试。
代码如下:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct chainNode{//结点类
chainNode(){}
chainNode(const int& element){this->element=element;}
int element;
chainNode *next;
};
class chain{//链表类
public:
chain(){firstNode=NULL;listSize=0;}
void insert(const int& theE);//插入方法
int indexOf(const int theE);//查找指定元素的位置
void print();//打印链表
friend chain combine(const chain c1,const chain c2);//合并两个链表,返回新链表
int listSize;
chainNode* firstNode;
};
void chain::insert(const int& theElement){
chainNode* s=new chainNode(theElement);
if(listSize==0){//在空链表中插入第一个结点
firstNode=s;
s->next=NULL;
listSize++;
return;
}
chainNode* cur=firstNode;
chainNode* p;
int index=1;
for(;index<listSize+1&&cur->element<theElement;index++){
p=cur;//记录cur的前一个
cur=cur->next;
}
if(index==1){//插入头结点
s->next=cur;
firstNode=s;
}
else{//插入中间的结点or尾
p->next=s;
s->next=cur;
}
listSize++;
}
int chain::indexOf(const int theElement){
chainNode* cur=firstNode;
int index=1;
while(cur!=NULL&&cur->element!=theElement){
cur=cur->next;
index++;
}
if(cur==NULL) return 0;
else return index;
}
void chain::print(){
chainNode* p=firstNode;
while(p->next!= NULL){
cout<<p->element<<",";
p=p->next;
}
cout<<p->element<<endl;
}
chain combine(const chain c1,const chain c2){
chain c3;
chainNode* p=c1.firstNode;
chainNode* s;
while(p!=NULL){
c3.insert(p->element);
s=p;
p=p->next;
}
s=c2.firstNode;
while(s!=NULL){
c3.insert(s->element);
s=s->next;
}
return c3;
}
int main(){
chain c1,c2,c3;
int temp;
cout<<"Input1"<<endl;
while(cin>>temp&&temp!=0)
c1.insert(temp);
cout<<"Output1"<<endl;
c1.print();
cout<<"Input2"<<endl;
cin>>temp;
c1.insert(temp);
cout<<"Output2"<<endl;
c1.print();
cout<<"Input3"<<endl;
cin>>temp;
cout<<"Output3"<<endl;
cout<<c1.indexOf(temp)<<endl;
cout<<"Input4"<<endl;
cin>>temp;
cout<<"Output4"<<endl;
cout<<c1.indexOf(temp)<<endl;
cout<<"Input5"<<endl;
while(cin>>temp&&temp!=0)
c2.insert(temp);
cout<<"Output5"<<endl;
c2.print();
c3=combine(c1,c2);
c3.print();
cout<<"End"<<endl;
return 0;
}
结论分析与体会:
回顾了链表的插入,查找,和输出,在写合并方法时顺便复习了上学期C++课程关于友元函数的讲解。