数据结构实验三——线性表的操作(代码功能完整)

实验目的:

1.掌握线性表的基本操作:插入、删除、查找。

2.掌握链表遍历器的使用方法。

实验内容:

1.创建线性表类。线性表的存储结构使用链表。

2.提供操作:自表首插入元素、删除指定元素、搜索表中是否有指定元素、   输出链表。

3.接收键盘录入的一系列整数(例10,25,8,33,60)作为节点的元素值,创4.建链表。输出链表内容。

5.输入一个整数(例33),在链表中进行搜索,输出其在链表中的位置。如果不存在输出0。

6.使用链表遍历器实现链表的反序输出。

7.创建两个有序链表,使用链表遍历器实现链表的合并。

实验步骤:
1.依据实验要求先建立一个线性表类,并将想要实现的方法先行构建出来,然后一一具体实现;

2.采用从浅入深、由易到难的方法,先编写链表的输入、输出、倒序输出等基本操作,然后攻克查找、删除、插入、合并等相对复杂的操作;

3.实验要求的基本操作完成后,建立main方法,建立程序菜单,然后使用switch方法,将程序的各个功能和用户输入的操作指令联系在一起,然后进行分类处理;

4.对一些具体的程序细节进行细化,实现程序的循环,使程序能够多次接收用户指令,并作出处理;实现数据的刷新与覆盖,新定义的链表内数据能够将原有的数据覆盖,从而使后续的数据处理在新输入的数据上进行;

对代码进行规格化,使整个程序界面更加美观,同时也使程序更加易懂。


附实验完整代码:

 #include
 using namespace std;
 struct Node  //结点信息
 {
    int Data;
    struct Node *Next;
 }; 
 class List  //链表类
 {
     private:
         Node *Head;  //头结点
     public:
         List();
         ~List();
         void AddList(); //链表建立
         void InsertData();  //插入元素
         void DeleteData();  //删除元素
         void SearchData();  //搜索元素
         void ShowList(); //链表输出
         void AntitoneShowList();  //反序输出
         void Unite2List(Node *); //两条链表合并
         Node *GetHeadNode(){return List::Head;}  //得到头结点
 };
 
List::List()
 {
     List::Head=NULL;
 } 
List::~List()  //销毁链表释放内存
 {
    Node *Dptr=NULL,*ptr=NULL;
    for (ptr=List::Head; ptr!=NULL; ptr=ptr->Next)
    {
       Dptr=ptr;
       ptr=ptr->Next;
       delete Dptr;
       Dptr=NULL;
    }
    List::Head=NULL;
 } 
 void List::AddList()  //链表建立 
 {
    int n=0;
    Node *p=NULL,*q=NULL;
    cout<<"链表长度:";
    cin>>n;
    if (n>=1)
    {
       p=new Node;
       cout<<"输入第1个元素:";
       cin>>p->Data;
       List::Head=p;  //头结点确立
       for (int i=1; i>p->Data;
          q->Next=p;
       }
          p->Next=NULL;
    }
 } 
 void List::InsertData()
 {
    if (List::Head==NULL) return;
    int i=0,n=0;
    Node *ptr=NULL,*newptr=NULL;
    newptr=new Node;
    cout<<"插入元素是:";
    cin>>newptr->Data;
    cout<<"插入位置是:";
    cin>>n;
    for (i=1,ptr=List::Head; ptr->Next!=NULL; ptr=ptr->Next,i++)
    {
       if (n<=1)
       {
        newptr->Next=List::Head;
        List::Head=newptr;
            return;
       }
       else if (n==i+1)
       {
        newptr->Next=ptr->Next;
        ptr->Next=newptr;
        return;
       }
    }
    ptr->Next=newptr;
    newptr->Next=NULL;
 } 
 void List::DeleteData()
 {
    if (List::Head==NULL) return;
    int d;
    Node *ptr=NULL,*delptr=NULL;
    cout<<"删除元素:";
    cin>>d;
    for (ptr=List::Head; ptr!=NULL; ptr=ptr->Next)
    {
       if (ptr->Data==d && ptr==List::Head)
       {
        delptr=ptr;
        ptr=ptr->Next;
       List::Head=ptr;
       delete delptr;
       delptr=NULL;
       return;
       }
       else if (ptr->Next->Data==d && ptr->Next->Next==NULL)
       {
           delptr=ptr->Next;
           delete delptr;
           delptr=NULL;
         ptr->Next=NULL;
           return;
       }
       else if (ptr->Next->Data==d)
       {
       delptr=ptr->Next;
       ptr->Next=ptr->Next->Next;
       delete delptr;
       delptr=NULL;
       return;
       }
    }
 } 
 void List::SearchData()
 {
    if (List::Head==NULL) return;
    int d=0,i=0;
    cout<<"输入要搜索的元素:";
    cin>>d;
    for (Node *ptr=List::Head; ptr!=NULL; ptr=ptr->Next,i++)
    {
      if (ptr->Data==d) 
      {
       cout<<"["<Data<<"] ";
      }
      else
         cout<Data<<" ";
    }
    cout<Next)
      cout<Data<<" ";
    cout<Next,i++)
      l[i]=ptr->Data;
    i--;
    while (i!=-1)
    {
       cout<Next!=NULL) ptr=ptr->Next;
     ptr->Next=lit;
 }
 
 int main()
 {
 int sel;
 List L1,L2;
 while (1)
 {
  system("cls");     
  cout<<"===========链表的基本操作(菜单)============"<>sel;
  switch (sel)
  {      
      case 1:
	     L1.~List();
         L1.AddList();
           break;     
	  case 2: 
	     L2.~List();
         L2.AddList();
           break;     
	  case 3:
	     L1.InsertData();
           break;       
	  case 4: 
	     L1.DeleteData();
           break;      
	  case 5:
	     L1.SearchData();
           break;      
	  case 6: 
	     L1.ShowList();
           break;         
	  case 7: 
	     L1.AntitoneShowList();
           break;       
	  case 8:
		 L1.Unite2List(L2.GetHeadNode());
           break;      
	  case 9:
		  return 0;      cout<

结果截图:

数据结构实验三——线性表的操作(代码功能完整)_第1张图片




你可能感兴趣的:(数据结构)