链表——单链表的基本运算

来源:互联网 发布:ubuntu 启动器 图标 编辑:程序博客网 时间:2024/05/18 06:20

实现单链表的基本运算:初始化、插入、删除、求表的长度、判空、释放。
(1)初始化单链表L,输出L->next的值;
(2)依次采用尾插法插入元素:输入分两行数据,第一行是尾插法需要插入的字符数据的个数,第二行是具体插入的字符数据。
(3)输出单链表L;
(4)输出单链表L的长度;
(5)判断单链表L是否为空;
(6)输出单链表L的第3个元素;
(7)输出元素a的位置;
(8)在第4个元素位置上插入‘x’元素;
(9)输出单链表L;
(10)删除L的第3个元素;
(11)输出单链表L;
(12)释放单链表L。

输入格式:

两行数据,第一行是尾插法需要插入的字符数据的个数,第二行是具体插入的字符数据。

输出格式:

按照题目要求输出

输入样例:

5
a b c d e

输出样例:

0
a b c d e
5
no
c
1
a b c x d e
a b x d e

#include<bits/stdc++.h>using namespace std;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef char ElemType;typedef struct LNode *List;typedef struct LNode{    ElemType data;    struct LNode *next;}LNode,*LinkList;Status InitList(LinkList &L)//初始化{    L = new LNode;    L -> next = NULL;    return OK;}void CreateList(LinkList &L,int n)//后插法创建链表{    LNode *p,*q;    L = new LNode;    L -> next = NULL;    p = L;    for(int i = 0;i<n;i++)    {        q = new LNode;        cin>>q -> data;        q -> next = NULL;        p -> next = q;        p = q;    }}int Length(LinkList &L)//求长度{    LNode *p;    p = L -> next;    int len = 0;    while(p)    {        p = p -> next;        len ++;    }    return len;}Status EmptyList(LinkList &L)//判断是否为空{    if(L == NULL|| L -> next == NULL)        return OK;    else        return ERROR;}void LocateElem(LinkList &L,ElemType e)//按值查找{    LNode *p = L -> next;    int i = 0;//记录位置    while(p != NULL && p ->data != e)    {        p = p -> next;        i++;    }    if(i != Length(L) && p != NULL)//找到并且不为空        cout<< i + 1<<endl;}void LocateElemth(int k,LinkList &L)//按位置查找{    LNode *p = L -> next;    int i = 0;    while( p!= NULL && i< k -1)//退出循环只能为空或者 i = k -1    {        p = p -> next;        i++;    }    if(i == k -1)    {        cout<<p ->data<<endl;    }}Status InsertList(LinkList &L,int i,ElemType e)//插入指定位置指定元素{    LNode *p,*q;    int j = 0;    p = L;    while(p&&j<i-1)//查找上一个结点并记录    {        p = p->next;        j++;    }    if(!p || j> i-1)//未找到    {        return ERROR;    }    else    {        q = new LNode;        q -> data = e;        q -> next = p ->next;        p -> next = q;        return OK;    }}Status ListDelete(LinkList &L,int i)//删除指定位置元素{    LNode *p,*q;    p = L;    int j = 0;    while(p -> next && j<i-1)//找到需要删除的前驱,并让p 指向    {        p = p -> next;        j++;    }    if(p == NULL || j> i -1)// 未找到    {        return ERROR;    }    else    {        q = p -> next;        p -> next = q -> next;        free(q);        return OK;    }}void ClearList(LinkList &L)//清空链表{    LNode *p;    while(L -> next)    {        p = L -> next;        L -> next = p -> next;        free(p);    }}void Printlist(LinkList &L)//输出{    LNode *p = L -> next;    while(p)    {        if(p -> next != NULL)//不是最后一个        {            cout<<p -> data<<" ";        }        else            cout<<p -> data;        p = p -> next;    }        cout<<endl;}int main(){    LinkList L;    ElemType tmp;    InitList(L);    cout<<L->next<<endl;    int num;    cin>>num;    CreateList(L,num);    Printlist(L);    cout<<Length(L)<<endl;    if(EmptyList(L))        cout<<"yes"<<endl;    else        cout<<"no"<<endl;    LocateElemth(3,L);    LocateElem(L,'a');    InsertList(L,4,'x');    Printlist(L);    ListDelete(L,3);    Printlist(L);    ClearList(L);}


原创粉丝点击