0
点赞
收藏
分享

微信扫一扫

C++实现一个简单的线性表链式存储

棒锤_45f2 2022-03-14 阅读 69
#include <stdlib.h>
#include<iostream>
using namespace std;//在头文件之后
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct Node {
    ElemType data;
    struct Node* next;
}Node;
typedef struct Node* LinkList;
//表的创建(头插法)
void CreateListHead(LinkList* L, int m[], int n) {
    LinkList p;
    int i;
    *L = new Node;
    (*L)->next = NULL;
    for (i = 0;i < n;i++) {
        p = new Node;
        p->data = m[i];
        p->next = (*L)->next;
        (*L)->next = p;
    }
}
//表的创建(尾插法)
void CreateListTail(LinkList* L, int m[], int n) {
    LinkList p, r;
    int i;
    *L = new Node;
    r = *L;
    for (i = 0;i < n;i++) {
        p = new Node;
        p->data = m[i];
        r->next = p;
        r = p;
    }
    r->next = NULL;
}
//获取元素的操作
Status GetElem(LinkList L, int i, ElemType &e) {
    int j;
    LinkList p;
    p = L->next;
    j = 1;
    while (p && j < i) {
        p = p->next;
        ++j;
    }
    if (!p || j > i) {
        return ERROR;
    }
    e = p->data;
    return OK;
}
//插入元素的操作
Status ListInsert(LinkList* L, int i, ElemType e) {
    int j;
    LinkList p, s;
    p = *L;
    j = 1;
    while (p && j < i) {
        p = p->next;
        ++j;
    }
    if (!p || j > i) {
        return ERROR;
    }
    s = new Node;
    s->data = e;
    s->next = p->next;
    p->next = s;
    return OK;
}
//删除元素的操作
Status ListDelete(LinkList* L, int i) {
    int j;
    LinkList p, q;
    p = *L;
    j = 1;
    while (p->next && j < i) {
        p = p->next;
        ++j;
    }
    if (!(p->next) || j > i) {
        return ERROR;
    }
    q = p->next;
    p->next = q->next;
    delete(q);
    return OK;
}
//输出链表中的元素
Status Output(LinkList L) {
    LinkList p;
    p = L->next;
    while (p) {
        cout << p->data << endl;
        p = p->next;
    }
    return OK;
}
int main() 
    {
    LinkList L;
    int i, k, j, n, e, m[1000];
    cout << "请输入元素个数" <<endl ;
    cin >> n;
    cout << "请输入各个元素的值" << endl;
    for (i = 0;i < n;i++) {
        cin >> m[i];
    }
    CreateListTail(&L, m, n);
    cout << "创建的链表为:" << endl;
    Output(L);
    cout << "请输入要获取第j个元素并返回到e值中(输入j的值):" << endl;
    cin >> j;
    GetElem(L, j, e);
    cout << "此时e的值为第j个元素值:" <<e<< endl;
    cout << "请输入在第k个元素前插入一个元素e1:" << endl;
    int e1;
    cin >> k;
    cin >> e1;
    ListInsert(&L, k, e1);
    cout << "此时链表的各元素如下" << endl;
    Output(L);
    cout << "请输入要删除链表中的第几个元素:" << endl;
    int l;
    cin >> l;
    ListDelete(&L, l);
    cout << "此时链表的各元素如下:" << endl;
    Output(L);
    return 0;
}
//可以对主函数部分进行修改,来使得这个线性表更加人性化,考虑使用switch语句来构建一个操作菜单
举报

相关推荐

0 条评论