循环链表—循环双链表/循环单链表

循环单/双链表,创建、初始化、尾插、头插、遍历、插入、删除、判空
部分函数采用重载(此处为c++代码)

#include <iostream>
#include <stdlib.h>
#include <stdbool.h>
using namespace std;
typedef struct lnode{										//单链表结构体
    int data;
    struct lnode *next;
}lnode,*linklist;
typedef struct dnode{										//双向链表结构体
    int data;
    struct dnode *next,*prior;
}dnode,*dlinklist;
bool initlinklist(dlinklist &l)								//双链表初始化(重载)
{
    l=(dnode *)malloc(sizeof(dnode));
    if(l==NULL)
        return false;
    l->next=l;
    l->prior=l;
    return true;
}
bool initlinklist(linklist &l)									//单链表初始化(重载)
{
    l=(lnode *)malloc(sizeof(lnode));
    if(l==NULL)
        return false;
    l->next=l;
    return true;
}
bool empty(dlinklist l)										//双向链表判空(重载)
{
    if(l->next==l)
        return true;
    else return false;
}
bool empty(linklist l)										//单项链表判空(重载)
{
    if(l->next==l)
        return true;
    else return false;
}
dlinklist dlinklist_tailinsert(dlinklist &l)					//双向链表尾插
{
    int x;
    dnode *p,*s;
    p=l;
    cin>>x;
    while(x!=0)
    {
        s=(dnode *)malloc(sizeof(dnode));
        s->data=x;
        s->next=p->next;
        p->next->prior=s;
        p->next=s;
        s->prior=p;
        p=s;
        cin>>x;
    }
    return l;
}
linklist linklist_tailinsert(linklist &l)								//单链表尾插
{
    int x;
    lnode *p,*s;
    p=l;
    cin>>x;
    while(x!=0)
    {
        s=(lnode *)malloc(sizeof(lnode));
        s->data=x;
        s->next=p->next;
        p->next=s;
        p=s;
        cin>>x;
    }
    return l;
}
linklist linklist_handinsert(linklist &l)								//单链表头插
{
    int x;
    lnode *p;
    cin>>x;
    while(x!=0)
    {
        p=(lnode *)malloc(sizeof(lnode));
        p->data=x;
        p->next=l->next;
        l->next=p;
        cin>>x;
    }
    return l;
}
bool deletelem(linklist &l,int i,int &e)					//单链表删除元素(重载)
{
    int j=1;
    lnode *p,*q;
    p=l->next;
    while(j<i-1)
    {
        p=p->next;
        j++;
    }
    if(j>i)
        return false;
    q=p->next;
    e=q->data;
    p->next=q->next;
    free(q);
    return true;
}
bool deletelem(dlinklist &l,int i,int &e)				//双向链表删除元素(重载)
{
    dnode *p,*q;
    int j=1;
    p=l->next;
    while(j<i-1)
    {
        p=p->next;
        j++;
    }
    if(j>i)
        return false;
    q=p->next;
    p->next=q->next;
    q->next->prior=p;
    e=q->data;
    free(q);
    return true;
}
bool insertelem(linklist &l,int i,int x)					//单链表插入(重载)
{
    int j=0;
    lnode *p,*q;
    p=l;
    while(j<i-1)
    {
        j++;
        p=p->next;
    }
    if(j>i)
        return false;
    q=(lnode *)malloc(sizeof(lnode));
    q->data=x;
    q->next=p->next;
    p->next=q;
    return true;
}
bool insertelem(dlinklist &l,int i,int x)					//双向链表插入(重载)
{
    int j=0;
    dnode *p,*q;
    p=l;
    while(j<i-1)
    {
        j++;
        p=p->next;
    }
    if(j>i)
        return false;
    q=(dnode *)malloc(sizeof(dnode));
    q->data=x;
    q->next=p->next;
    p->next->prior=q;
    p->next=q;
    q->prior=p;
    return true;
}
void looklinklist(dlinklist l)									//双向链表遍历(重载)
{
    int j=1;
    dnode *p;
    p=l->next;
    while(p!=l)
    {
        cout<<"number "<<j<<" is "<<p->data<<" , ";
        p=p->next;
        j++;
    }
    cout<<endl;
}
void looklinklist(linklist l)									//单链表遍历(重载)
{
    int j=1;
    lnode *p;
    p=l->next;
    while(p!=l)
    {
        cout<<"number "<<j<<" is "<<p->data<<" , ";
        p=p->next;
        j++;
    }
    cout<<endl;
}
void looklinklist(linklist l,int j)							//单链表循环遍历(重载)
{
    int i=1;
    lnode *p;
    p=l->next;
    while(i<j)
    {
        cout<<"number "<<i<<" is "<<p->data<<" , ";
        p=p->next;
        i++;
    }
    cout<<endl;
}
int main() {
    linklist l;
    if(initlinklist(l))
        cout<<"init succeed"<<endl;
    else cout<<"error"<<endl;
    if(empty(l))
        cout<<"empty\n";
    else cout<<"not empty\n";
    linklist_tailinsert(l);
    looklinklist(l);
    int e;
    if(deletelem(l,3,e))
        cout<<"deletelem "<<e<<" succeed"<<endl;
    else cout<<"deletelem error"<<endl;
    looklinklist(l);
    if(insertelem(l,3,e))
        cout<<"insertelem "<<e<<" succeed"<<endl;
    else cout<<"insertelem error"<<endl;
    looklinklist(l);
    cout<<"---------"<<endl;
    dlinklist l2;
    if(initlinklist(l2))
        cout<<"init l2 succeed\n";
    else cout<<"false"<<endl;
    dlinklist_tailinsert(l2);
    looklinklist(l2);
    if(deletelem(l2,4,e))
        cout<<"deldelem "<<e<<" succeed"<<endl;
    else cout<<"deldelem error"<<endl;
    looklinklist(l2);
    if(insertelem(l2,4,e))
        cout<<"insertelem "<<e<<" succeed"<<endl;
    else cout<<"insertelem false"<<endl;
    looklinklist(l2);
	cout  << "over\n";
	return 0;
}

posted @ 2020-08-16 12:36  Cool-baby  阅读(20)  评论(0编辑  收藏  举报