当前位置: 代码迷 >> 综合 >> 数据结构课笔记
  详细解决方案

数据结构课笔记

热度:3   发布时间:2023-09-20 17:11:10.0

链表

#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;struct node
{int data;node* next;node() { next = NULL; }     //注意结构体这里要初始化为0 不然next指针有值
};class List
{node *head;int len;                                        //记录一下len 主要用来判断插入删除等是否成功
public:List() { head = new node; len = 0; }node* find(int i){node* p = head; int j = 0;while(p && j < i) p = p->next, j++;return p;}int insert(int i, int val){if(!(1 <= i && i <= len + 1)) return 0;            //操作前先判是否合法 insert可以到len + 1node* p = find(i - 1);node* t = new node; t->data = val;t->next = p->next; p->next = t; len++;                                             //注意要更新lenreturn 1;}int ask(int i){if(!(1 <= i && i <= len)) return 1e9;     node* p = find(i);return p->data;}int del(int i){if(!(1 <= i && i <= len)) return 0;node* p = find(i - 1);node* t = p->next;p->next = p->next->next;delete t;len--;return 1;}void out(){node* p = head->next;while(p){printf("%d ", p->data);p = p->next;}puts("");}~List(){while(head){node* t = head;head = head->next;delete t;}}
};int main()
{List l;int n; scanf("%d", &n);_for(i, 1, n){int x; scanf("%d", &x);l.insert(i, x);}l.out();int i, val;_for(t, 1, 2){scanf("%d%d", &i, &val);if(!l.insert(i, val)) puts("error");else l.out();}_for(t, 1, 2){scanf("%d", &i);if(!l.del(i)) puts("error");else l.out();}_for(t, 1, 2){scanf("%d", &i);int temp = l.ask(i);if(temp == 1e9) puts("error");else printf("%d\n", temp);}return 0;
}