7-3 jmu-ds-单链表的基本运算

来源:互联网 发布:确保成本测算数据准确 编辑:程序博客网 时间:2024/05/16 06:37

7-3 jmu-ds-单链表的基本运算(15 分)

实现单链表的基本运算:初始化、插入、删除、求表的长度、判空、释放。
(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

作者: 王俊玲
单位: 集美大学
时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB



#include<stdlib.h>
#include<iostream>
#include<mm_malloc.h>
using namespace std;
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2
typedef int  Status;
typedef char  ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;
void ListCreate_L(LinkList &L, int n)
{
    L = new LNode;
    L->next = NULL;
    LNode *t = L;
    LNode *p;
    int i;
    for(i = 0; i < n; i++)
    {
        p = new LNode;
        cin>>p->data;
        p->next = NULL;
        t->next = p;
        t = p;
        if(i == n - 1)
        {
            t->next = NULL;
        }
    }
    t->next = NULL;
}
Status InitList(LinkList &L)
{
    L = new LNode;
    L->next = NULL;
    return 1;
}
int ListLength(LinkList &L)
{
    LNode *p = L->next;
    int i = 0;
    while(p->next != NULL)
    {
        i++;
        p = p->next;
    }
    i++;
    return i;
}
void ListisEmpty(LinkList &L)
{
    if(L->next != NULL)
        cout<<"no"<<endl;
    else
        cout<<"yes"<<endl;
}
void ListPrintNum(LinkList &L)
{
    LNode *p = L;
    int i;
    for(i = 0; i < 3; i++)
    {
        p = p->next;
    }
    cout<<p->data<<endl;
}
void getListPos(LinkList &L)
{
    LNode *p = L;
    int i = 0;
   while(p->next != NULL)
    {
        p = p ->next;
        i++;
        if(p->data == 'a')
            break;
    }
    cout<<i<<endl;
}
void ListInsert(LinkList &L)
{
    LNode *p =L;
    int i = 0;
    while((i<3)&&p)
    {
        i++;
        p = p->next;
    }
    LNode *s;
    s = new LNode;
    s->data = 'x';
    s->next = p->next;
    p->next = s;
}
void ListDelete(LinkList &L)
{
    int i = 0;
    LNode *p = L;
    while((i<2) && p)
    {
        i++;
        p = p->next;
    }
    LNode *q = p -> next;
    p->next = p->next->next;
    delete q;
}
void ListClear(LinkList &L)
{
    LNode *p = L, *q;
    for(;p->next != NULL;p = q)
    {
        q = p->next;
        delete p;
    }
    L = NULL;
}
void ListPrint_L(LinkList &L){
    LNode *p;
    p = L->next;
    while(p!=NULL)
    {
        if(p->next == NULL)
            cout<<p->data;
        else
            cout<<p->data<<" ";
        p = p->next;
    }
}
int main()
{
    LinkList L;
    InitList(L);
    cout<<L->next<<endl;
    int n;
    cin>>n;
    ListCreate_L(L, n);
    ListPrint_L(L);
    cout<<endl;
    cout<<ListLength(L)<<endl;
    ListisEmpty(L);
    ListPrintNum(L);
    getListPos(L);
    ListInsert(L);
    ListPrint_L(L);
    cout<<endl;
    ListDelete(L);
    ListPrint_L(L);
    ListClear(L);
    return 0;
}
原创粉丝点击