鱼C论坛

 找回密码
 立即注册
查看: 3588|回复: 0

带头结点单链表的创建,插入,删除等问题【程序中断】

[复制链接]
发表于 2013-7-7 22:45:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;

class List;
class ListNode
{
friend class List;
private:
        int data;
        ListNode *link;
public:
        ListNode():link(NULL){}
        ListNode(int d):data(d),link(NULL){}
};

class List
{
private:
        ListNode *first,*last;
public:
        List()
        {
        first=last=new ListNode();
        }
        ~List();
        int insert(int i,int d);
        int remove(int temp);
        ListNode * findData(int temp);
        ListNode * find(int i);
        int length();
        void makeEmpty();
};

List::~List()
{
        makeEmpty();
        delete first;
}

void List:: makeEmpty()
{//删除头结点之外的所有其他结点
    ListNode* q;
        while(first->link!=NULL)
        {
                q=first->link;
                first->link=q->link;
                delete q;
        }
        last=first;//last由wild pointer指向first
}

ListNode* List::findData(int temp)//找到数据值为temp的结点,并返回其地址
{
        ListNode *p=first->link;
        while(p!=NULL&&p->data!=temp)
        {
                p=p->link;
        }
        if(p==NULL)return NULL;
        return p;
}

ListNode* List::find(int i)//找到第i个结点【-1,0,1,2,,,】,并返回其地址
{
        ListNode* p=first->link;
        int k=0;
        if(i<-1){
                cout<<"位置无效,i需大于等于-1."<<endl;
                return NULL;
        }
        if(i=-1) {return first;}
        while(p!=NULL&&k<i)
        {
                p=p->link;
                k++;
        }
        if(p==NULL){
        cout<<"未找到该结点"<<endl;
        return NULL;
        }
        return p;
}

int List::insert(int i,int d)//将值为value的结点插入到第i个位置【0,1,2,,,】
{
        ListNode *p=find(i-1);
        if(p=NULL)return 0;
        ListNode* newnode=new ListNode(d);
        newnode->link=p->link;
        if(p->link=NULL)last=newnode;
        p->link=newnode;
        return 1;
}

int List::remove(int i)//将第i个元素删除【0,1,2,,,】
{
        ListNode *p=first->link,*q;
        int k=0;
        while(p!=NULL&&k<i-1)//确定第i-1个元素位置
        {
                p=p->link;
                k++;
        }
        if(i<0||p==NULL||p->link!=NULL)//p已经遍历到最后一个结点【p->link!=NULL】
        {                                                 //或最后一个结点之后或p没有遍历还在第0个结点【p==NULL】
        cerr<<"位置无效!"<<endl;
        return 0;
        }
        q=p->link;
        p->link=q->link;
        if(q->link==NULL)last=p;
        delete q;
        return 1;
}

int List::length()
{
        int k=0;
        ListNode *p=first->link;
        while(p!=NULL)
        {
                k++;
                p=p->link;
        }
        return k;
}

void main()
{
List *list=new List();
list->find(-1);
list->insert(0,35);
list->insert(1,10);
//....................
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 00:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表