2020-10-07

    科技2024-07-23  65

    C++数据结构

    线性表链式结构的实现与操作

    请你定义一个链表,可以对链表进行“在某个元素之前插入一些元素”、“删除某个位置的元素”、“查找某元素”、“获取某个位置的元素”、“遍历输出所有元素”、“求链表的长度”等操作。键盘输入一些命令,可以执行上述操作。本题中,链表元素为整数,链表的第一个元素位置为1,链表的最大长度为20。

    #include using namespace std;

    struct Node { int data; Node *next; };

    class Linklist { public: Linklist(); int length(); void Insert(int i, int x); void Get(int i); void Locate(int x); void Delete(int i); void Printlist(); private: Node *first; };

    Linklist::Linklist() { first = new Node; first->next= NULL; }

    void Linklist::Printlist() { Node *p = first->next; while(p != NULL) { cout << p->data; p = p->next; } }

    int Linklist::length() { Node *p = first->next; int count = 0; while (p != NULL) { p = p->next; count++; } return count; }

    void Linklist::Get(int i) { Node *p = first; int count = 0; while (p != NULL && count < i) { p = p->next; count++; } if (p == NULL) { cout << “位置不正确” << endl; } else { cout << p->data << endl; } }

    void Linklist::Locate(int x) { Node * p = first->next; int count = 1; while (p != NULL) { if (p->data == x) { cout << count; return; } p = p->next; count++; } if (p == NULL) { cout << “None” << endl; } }

    void Linklist::Insert(int i,int x) { Node *p = first,*s = NULL; int count = 0; s = new Node; while (p != NULL && count < i-1) { p = p->next; count++; } s->data = x; s->next = p->next; p->next = s; }

    void Linklist::Delete(int i) { int x; Node *p = first; Node *s = NULL; int count = 0; while (p != NULL && count < i-1) { p = p->next; count++; }

    s = p->next; x = s->data; p->next = s->next; delete s; cout << x;

    }

    int main() { Linklist L; int k,x,num; char c; while (1) { cin >> c; if (c == ‘E’) { break; } switch© { case ‘I’: { cin >> num; for (int i = 0; i < num; i++) { cin >> k >> x; L.Insert(k,x); } } break; case ‘S’: cin >> k; L.Locate(k); break; case ‘D’: cin >> k; L.Delete(k); break; case ‘G’: cin >> k; L.Get(k); break; case ‘L’: cout << L.length(); break; case ‘V’: L.Printlist(); break; } } }

    Processed: 0.010, SQL: 9