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

📄 func2-1.cpp

📁 高一凡的数据结构源码
💻 CPP
字号:
 // func2-1.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的扩展操作(3个)
 // algo2-6.cpp和bo7-2.cpp用到
 void InsertAscend(LinkList &L,ElemType e,int(*compare)(ElemType,ElemType))
 { // 按关键字非降序将e插入表L。函数compare()返回值为:形参1的关键字-形参2的关键字
   LinkList q=L;
   if(!L||compare(e,L->data)<=0) // 链表空或e的关键字小于等于首结点的关键字
     ListInsert(L,1,e); // 将e插在表头,在bo2-8.cpp中
   else
   {
     while(q->next&&compare(q->next->data,e)<0) // q不是尾结点且q的下一结点关键字<e的关键字
       q=q->next;
     ListInsert(q,2,e); // 插在q所指结点后(将q作为头指针)
   }
 }

 LinkList Point(LinkList L,ElemType e,Status(*equal)(ElemType,ElemType),LinkList &p)
 { // 查找表L中满足条件的结点。如找到,返回指向该结点的指针,p指向该结点的前驱(若该结点是
   // 首元结点,则p=NULL)。如表L中无满足条件的结点,则返回NULL,p无定义。
   // 函数equal()的两形参的关键字相等,返回OK;否则返回ERROR
   int i,j;
   i=LocateElem(L,e,equal);
   if(i) // 找到
   {
     if(i==1) // 是首元结点
     {
       p=NULL;
       return L;
     }
     p=L;
     for(j=2;j<i;j++)
       p=p->next;
     return p->next;
   }
   return NULL; // 没找到
 }

 Status DeleteElem(LinkList &L,ElemType &e,Status(*equal)(ElemType,ElemType))
 { // 删除表L中满足条件的结点,并返回TRUE;如无此结点,则返回FALSE。
   // 函数equal()的两形参的关键字相等,返回OK;否则返回ERROR
   LinkList p,q;
   q=Point(L,e,equal,p);
   if(q) // 找到此结点,且q指向该结点
   {
     if(p) // 该结点不是首元结点,p指向其前驱
       ListDelete(p,2,e); // 将p作为头指针,删除第2个结点
     else // 该结点是首元结点
       ListDelete(L,1,e);
     return TRUE;
   }
   return FALSE;
 }

⌨️ 快捷键说明

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