学习数据结构课程时所写,本人代码能力有限,如有不妥,欢迎指点
#include <iostream> using namespace std; #define NO_FOUND 1 struct Node { int data; // 数据类型可以改变,此程序中以int为例子 Node* next; }; typedef Node* List_Node; class List { public: List(); ~List(); int getLength(); // 返回链表总结点个数 void Init_List(); // 创建新链表 void Print_List(); // 遍历输出链表 List_Node GetNode(int i); // 返回第i个结点 void Delete_Node(int i); // 删除第i个结点 void Insert_Node(int x, int i); // 在链表的第i个结点之前插入值为x的元素 int Locate_Elem(int e); // 查找数据e所在结点的位置,从1开始 private: List_Node head; }; List::List() { head = NULL; } void List::Init_List() { List_Node p, q; p = new Node; q = p; cout << "请输入几个数据(以-1表示结束):"<<endl; cin >> p->data; while (p->data != -1) { if (head == NULL) head = p; else q->next = p; q = p; p = new Node; /*cout << "请输入数据(以-1表示结束):" << endl;*/ cin >> p->data; } q->next = NULL; delete p; } void List::Print_List() { cout << "所有数据如下:" << endl; List_Node p=head; while (p) { cout<<p->data<<" "; p = p->next; } } List_Node List::GetNode(int i) { List_Node p = head; int j = 1; // 标记head结点位置值为1 while (p && j < i) { p = p->next; j++; } if (!p||j>i) // 当p为空或i=0时 return NULL; return p; } void List::Delete_Node(int i) { if (i == 1) //当删除头结点时 { head = head->next; return; } List_Node p = GetNode(i-1); List_Node q = p->next; p->next = q->next; delete q; } void List::Insert_Node(int x, int i) { if (i == 1) // 在链表头部插一个结点 { List_Node t = new Node; t->data = x; t->next = head; head = t; } else { List_Node p = GetNode(i-1); // 找到第i个结点的前驱 List_Node temp = new Node; temp->data = x; temp->next = p->next; p->next = temp; } } List::~List() { List_Node p=head; while (p) { head = p->next; delete p; p = head; } } int List::Locate_Elem(int e) { List_Node p = head; int pos = 1; while (p != NULL) { if (p->data == e) return pos; else { p = p->next; pos++; } } return NO_FOUND; } int List::getLength() { int cnt = 0; List_Node p = head; while (p != NULL) { cnt++; p = p->next; } return cnt; } int main() { List l; l.Init_List(); l.Print_List(); cout <<endl<< "你要删除第几个结点?" << endl; int i; cin >> i; if (i > l.getLength()||i<1) cout << "删除失败!" << endl; else { l.Delete_Node(i); l.Print_List(); } cout << endl<<"请输入想要插入元素的值和插入的位置:"; int x,pos; cin >> x>>pos; l.Insert_Node(x, pos); l.Print_List(); cout << endl << "请输入想要查找元素的值:"; int t; cin >> t; if (l.Locate_Elem(t) == NO_FOUND) cout << "不存在这个元素" << endl; else cout << "该元素在链表中处于第" << l.Locate_Elem(t) << "个" << endl; }