c++循环单链表

本文介绍了如何使用C++创建和操作循环单链表,包括插入和删除操作。节点值通过模板类处理,程序允许用户输入节点数,并提供display函数用于输出节点值。初始化时包含一个头节点作为第0个节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环链表可以当做链表来用,插入删除都可以超出本身节点数。节点用的是模板类,display函数输出的是节点的值。main函数开头请输入你的节点数。初始化有个头节点,也就是第0个节点。

#include<iostream>
#include<iomanip>
#include<malloc.h>
using namespace std;
template <class T>  //类模板
class node        //节点
{
public:
    T date;
    node* next;
    node(T a)        //构造函数
    {
        date=a;
        next=0;
    }
};
class list             //链表
{
public:
    node<int>* first;
    list()
    {
        first=NULL;
    }
    node<int>* insert()    //循环实现
    {   int a;               //节点值
        node<int>* p=first;//节点数
        int n;
        cin>>n;
        int i=0;
        while(n--)
        {
            i++;
            cout<<"你的节点第"<<i<<setw(10)
                <<setiosflags(ios::left)<<endl;
            cin>>a;
            if(first->date==0)
                first->date=a;
            else
            {
                node<int>* n=new node<int>(a);
                p->next=n;
                n->next=first;
                p=p->next;   //尾节点指向0节点
            }
        }
        return first;
    }
    int delete1() {  //消除下一个节点
        if(this==NULL)    //this指针指向类本身
            cout<<"error";
        else {
            this->first->next=this->first->next->next;
            return 1;
        }
        return 0;
    }
    void deleteone(int);
    void insertone(int,int);
    void display();
};
void list::deleteone(int a) { //消除第k个节点
    node<int>*pointer=this->first;
    for(int i=1; i<a; i++)
        pointer=pointer->next;
    pointer->next=pointer->next->next;
}
void list::insertone(int a,int value) {
//向第i个位置插入节点
    node<int>*pointer=this->first;
    for(int i=1; i<a-1; i++)
        pointer=pointer->next;
    node<int> *temp=new node<int>(value);
    temp->next=pointer->next;
    pointer->next=temp;
}
void  list::display() {
    node<int>*temp=this->first;
    int value=temp->date;
    for(temp; temp->next->date!=value; temp=temp->next)
        cout<<setiosflags(ios::left)<<setw(3)<<temp->date<<"->";
    cout<<temp->date<<endl;
}
int main() {
    list* p=new list();
    p->first=new node<int>(3);   //第0个节点
    p->insert();
    try {   //检查消除是否成功
        int z=p->delete1();//消除第一个节点
        if(z==0)
            throw 1;   //抛出异常
    }
    catch(int) {
        cout<<"你没有成功消除节点";
    }
    //insertone,deleteone不能为0节点
    cout << p->first->date<< endl;
    cout << p->first->next->date<< endl;
    cout << p->first->next->next->date<< endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值