通过优化指针实现的优先列表

来源:互联网 发布:网络电视有蓝牙吗 编辑:程序博客网 时间:2024/05/16 15:01

优先列表链表指针实现(参考《C和指针》)

通过使用指向 struct node *link 的指针,将头插入问题优化,并可利用解决二分搜索

#include<iostream>#include<cstring>#include<cstdlib>using namespace std;struct node{    int val;    node *link;}Node;bool insert(register node **linkp, int new_val){    register node *current;    register node *new_;    while((current=*linkp)!=NULL&&current->val<new_val)        linkp=&current->link;    new_=(node *)malloc( sizeof(node));    if(new_==NULL)     {        cout<<"ask for mem failed"<<endl;        return false;    }    new_->val=new_val;    new_->link=current;    *linkp=new_;    return true;}bool del(register node **linkp, int del_val){    register node *current;    while((current=*linkp)!=NULL&&current->val!=del_val)        linkp=&current->link;    if(current==NULL)     {        cout<<"Not found!"<<endl;        return false;    }    *linkp=current->link;    free(current);    return true;}bool quar(register node **linkp,int quar_val){    register node *current;    while((current=*linkp)!=NULL&&current->val!=quar_val)        linkp=&current->link;    if(current==NULL)    {        cout<<"Not found!"<<endl;        return false;    }    else cout<<"exist"<<endl;    return true;}bool print(node **linkp){    node *current;    while((current=*linkp)!=NULL)    {        cout<<current->val<<endl;        linkp=&current->link;    }    return true;}int main(){    node *root,**linkp,*del_all,*tmp;    root=(node *)malloc(sizeof(node));    root->link=NULL;    linkp=&root->link;    int ask,num;    cout<<"ask=0: break; ask=1: insert,ask=2: del,ask=3: quar,ask=4: quar all"<<endl;    while(cin>>ask)    {        if(!ask) break;        switch(ask)        {        case 1 :cin>>num;insert(linkp,num);break;        case 2 :cin>>num;del(linkp,num);break;        case 3 :cin>>num;quar(linkp,num);break;        case 4 :print(linkp);break;        default :cout<<"ILLEGAL INPUT"<<endl;break;        }    }    for(del_all=root;del_all!=NULL;)    {        tmp=del_all->link;        free(del_all);        del_all=tmp;    }    return 0;}

这里写图片描述

1 0