写一个函数DeleteRange删除单链表中结点的值在low 和high之间的结点
生活随笔
收集整理的這篇文章主要介紹了
写一个函数DeleteRange删除单链表中结点的值在low 和high之间的结点
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*實驗2 1. 寫一個函數(shù)DeleteRange刪除單鏈表中結(jié)點的值在low 和high之間的結(jié)點 (low和high的值是多少可自由設(shè)計)。并且要在程序中驗證其功能實現(xiàn)。 (可在實驗1的第3題的基礎(chǔ)上增加此功能)。 此題的源程序保存為 2_a4.cpp。 */ #include<iostream> using namespace std; typedef char datatype; typedef struct node* pointer; struct node { datatype data; pointer next; }; typedef node* lklist; lklist Creat() {//尾插法建表,有頭結(jié)點 pointer head,rear,s; char ch; head=new node; //生成頭結(jié)點 rear=head; //尾指針初值 cout<<"請依次輸入鏈表中的元素,每個元素是一個字符,以輸入$表示結(jié)束:"<<endl; while(cin>>ch,ch!=') {? //讀入并檢測結(jié)束 s=new node; s->data=ch; //生成新結(jié)點 rear->next=s; rear=s; ?? //插入表尾,改尾指針 } rear->next=NULL; //尾結(jié)點的后繼為空 return head; } lklist InitList() { pointer head; head=new node; head->next=NULL; return head; } int Length(lklist L) { int j; pointer p; j=0; p=L->next; //從首結(jié)點開始 while(p!=NULL) //逐點檢測、計數(shù) { j++; p=p->next; } return j; } pointer Get(lklist head,int i) //0≤i≤n { int j; pointer p; if(i<0) return NULL;//位置非法,無此結(jié)點 j=-1; //計數(shù)器 p=head; //從頭結(jié)點(0號)開始搜索 while(p!=NULL) { j++;if(j==i) break; p=p->next; //未到第i點,繼續(xù) } return p; //含找到、未找到兩種情況 } int Insert(lklist head,datatype x,int i) { pointer q,s; q=Get(head,i-1); //找第i-1個點 if(q==NULL)?? //無第i-1點,即i<1或i>n+1時 ??? { cout<<"非法插入位置!\n"; return 0; } s=new node; //生成新結(jié)點 s->data=x; s->next=q->next;? //新點的后繼是原第i個點 q->next=s; //原第i?1個點的后繼是新點 return 1; //插入成功 } int Delete(lklist head,int i) { pointer p,q; q=Get(head,i-1); //找待刪點的直接前趨 if(q==NULL || q->next==NULL)//即i<1或i>n時 ??? {cout<<"非法刪除位置!\n";return 0;} p=q->next; //保存待刪點地址 q->next=p->next; //修改前趨的后繼指針 delete p; //釋放結(jié)點 return 1; //刪除成功 } pointer Locate(lklist head,datatype x) { pointer p; p=head->next; //從首結(jié)點開始搜索 while(p!=NULL) { if(p->data==x) break; p=p->next; //到下一個點 } return p; //含找到、未找到兩種情況 } int locate2(lklist head,datatype x) { int j; pointer p; j=0; //計數(shù)器 p=head->next; //從首結(jié)點開始掃描 while(p!=NULL) { j++; if(p->data==x) break;//找到,退出 p=p->next; ? //沒找到,繼續(xù) } if(p!=NULL) return j; //找到x else return -1; //沒有x,查找失敗 } void DeleteRange(lklist head,datatype low,datatype high) { pointer p,q; q=head; p=head->next; //從頭結(jié)點(0號)開始搜索 while(p!=NULL) { if(p->data>=low && p->data<=high) { q->next =? p->next; delete p; p=q->next; } else { p=p->next; q=q->next; } } } void Display(lklist head) { pointer p; p=head->next; cout<<"鏈表中的元素依次是:"; while(p!=NULL) { cout<<p->data<<'\t'; p=p->next; } cout<<endl; } int main() { lklist Lk; Lk=Creat(); Display(Lk); DeleteRange(Lk, 'A','B'); Display(Lk); return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/springside5/archive/2011/10/22/2486343.html
總結(jié)
以上是生活随笔為你收集整理的写一个函数DeleteRange删除单链表中结点的值在low 和high之间的结点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ2186——并查集+Tarjan算
- 下一篇: 【配置文件】log4j是什么log4j