⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p74_75.cpp

📁 包含常见的数据结构的类和函数
💻 CPP
字号:
		//Test is T74_75.cpp		#include <stdio.h>		#include <iostream.h>		class List;							//List类的前视声明		class ListNode {						//结点类定义		friend class List;		friend ostream & operator << ( ostream&, List & );						//声明List类为友元类		public:		   //ListNode() { data = 0; link = NULL; );		   ListNode( int x, ListNode * p ) { data = x; link = p; }		private:		   int data;							//数据元素域		   ListNode *link;						//链指针域		};		class List {							//List类定义		friend ostream & operator << ( ostream&, List & );						//声明List类为友元类		public:		   List(): first( NULL ) {};		   //链表公共操作		   //………		   int Insert ( const int x, const int i );		   int Remove ( int i );		private:		   ListNode *first, *last;					//指向链表表头的指针		};		#include <iostream.h>		int List::Insert ( const int x, const int i ) {		//将新元素x插入到第i结点之前。i是结点号,从0开始。		   ListNode *p = first;  int k = 0;		   while ( p != NULL && k< i-1 ) { p = p->link;  k++; }		//循链找第i-1个结点		   if ( p == NULL && first != NULL ) {				//非空表而且链短,找不到第i-1个结点			 cout << "Invalid position for Insertation!\n";  return 0;	//终止插入, 函数返回0		   }		   ListNode *newnode= new ListNode( x, NULL );				//建立一个newnode指示的新结点, 数据为x		   if ( first == NULL || i == 0 ) {					//插入空表或非空表第一个结点之前			  newnode->link = first;						//新结点成为第一个结点			  if ( first == NULL ) last = newnode;				//原为空表时,表尾指针指向这个新结点			  first = newnode;		   }		   else {									//插入在链表的中间或尾部			  newnode->link = p->link;			  if ( p->link == NULL ) last = newnode;			  p->link = newnode;		}		   return 1;									//正常插入,函数返回1		}		int List::Remove ( int i ) {		//将链表中的第i个元素删去, 通过函数返回该元素。若i不合理, 则返回NULL。		   if ( i < 0 ) { cout << "Invalid position for Deletion!\n";  return 0;}	//不能删除, 函数返回0		   ListNode *p = first, *q;  int k = 0;		   while ( p != NULL && k< i-1 ) { p = p->link; k++; }		//循链找第i-1个结点		   if ( p == NULL || p->link == NULL ) {							//空表或者链短,找不到第i-1个结点			  cout << "Invalid position for Deletion!\n";  return 0;	//不能删除, 函数返回0		   }		   if ( i == 0 ) {	q = first;  p = first = first->link; } 		//删第一个结点时,重新拉链		   else { q = p->link;  p->link = q->link; }			//删中间一个结点或尾结点时		   if ( q == last ) last = p;						//删表尾结点时, 表尾指针修改		   k = q->data;  delete q;  return k;					//取出被删结点中的数据值		}		ostream & operator << ( ostream& os , List & onelist) {		    ListNode * p = onelist.first;		    if ( p == NULL ) os << "It is empty";		    else while ( p != NULL ) {			     os << p->data << " " ;			     p = p->link;			 }		    return os;		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -