数据结构之链表

#include <iostream>
#include "stdio.h"
using namespace std;

#define maxsize 50
#define elemtype int

typedef struct
{
    int data[maxsize];
    int length;
}SqList;


typedef struct lnode
{
    elemtype data;
    struct lnode *next;
}lnode,*linklist;


class List
{
    public:
        void  sqlist_print(SqList SL);                          //顺序表打印
        bool sqlist_listInsert(SqList &SL,int i,elemtype e);    //顺序表插入结点
        bool sqlist_listDelete(SqList &SL,int i);               //顺序表删除结点
        int sqlist_locateElem(SqList SL,elemtype e);            //按值查找
        void linklist_print(linklist L);                        //单链表打印
        linklist linklist_insert_head(linklist &L);             //单链表头插法
        linklist linklist_insert_tail(linklist &L);             //单链表尾插法
        linklist linklist_findelem(linklist L,elemtype e);      //单链表按值查找
        linklist linklist_insert(linklist &L,elemtype x,elemtype e);    //单链表在x后面插入e
        linklist linklist_del_node(linklist &L,elemtype e);     //单链表删除e

};


/*****************************顺序表***********************************/

void List::sqlist_print(SqList SL)
{
    for(int i=0;i<SL.length;i++)
        cout<<SL.data[i];
    cout<<endl;
}

//插入操作
bool List::sqlist_listInsert(SqList &SL,int i,elemtype e)
{
    if(i<1||i>SL.length+1)
        return false;
    if(SL.length>=maxsize)
        return false;
    for(int j=SL.length;j>=i;j--)
        SL.data[j]=SL.data[j-1];
    SL.data[i-1]=e;
    SL.length++;
    return true;    
}

//删除操作
bool List::sqlist_listDelete(SqList &SL,int i)
{
    if(i<1||i>SL.length)
        return false;
    for(int j=i;j<SL.length;j++)
        SL.data[j-1]=SL.data[j];
    SL.length--;
    return true;
}

//顺序查找
int List::sqlist_locateElem(SqList SL,elemtype e)
{
    for(int i=0;i<SL.length;i++)
    {
        if(SL.data[i]==e)
            return i+1;
    }
    return 0;
}


/*****************************单链表***********************************/


void List::linklist_print(linklist L)
{
    L=L->next;
    while(L!=nullptr)
    {
        cout<<L->data<<" ";
        L=L->next;
    }
    cout<<endl;
}

//头插法建立链表
linklist List::linklist_insert_head(linklist &L)
{
    lnode *s;
    int x;
    L=new lnode;    //头节点
    L->next=nullptr;
 
    while(cin>>x)
    {
        if(x==9999)
            break;
        s=new lnode;
        s->data=x;
        s->next=L->next;
        L->next=s;
    }
    return L;
}

//尾插法建立链表
linklist List::linklist_insert_tail(linklist &L)
{
    lnode *s,*r;
    int x;
    L=new lnode; //头节点
    r=L;    //r为表尾指针
    while(cin>>x)
    {
        if(x==9999)
            break;
        s=new lnode;
        s->data=x;
        r->next=s;
        r=s;
    }
    r->next=nullptr;
}

//按值查找
linklist List::linklist_findelem(linklist L,elemtype e)
{
    lnode *p;
    p=L->next;
    while(p!=nullptr&&p->data!=e)
        p=p->next;
    return p;
}

//结点插入
linklist List::linklist_insert(linklist &L,elemtype x,elemtype e)//在x后面插入e
{
    lnode *p=L->next;
    while(p!=nullptr&&p->data!=x)
        p=p->next;
    lnode *s=new lnode;
    s->data=e;
    s->next=p->next;
    p->next=s;
    return L;
}

//结点删除
linklist List::linklist_del_node(linklist &L,elemtype e)//删除元素e
{
    lnode *pre=L;
    while(pre->next!=nullptr&&pre->next->data!=e)
        pre=pre->next;
    lnode *p=pre->next;
    pre->next=p->next;
    free(p);
    return L;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值