本文共 2447 字,大约阅读时间需要 8 分钟。
#include#include #include using namespace std;#define ElemType int//C++单链表结点类class LNode { public: ElemType data; LNode* next;};//C++单链表类class LinkList { private: LNode *head;public: LinkList(); void createList(); void displayList(); LNode* getHead();};void menu(LinkList* list);void save(LinkList* list);void read(LinkList* list);int main() { LinkList list; menu(&list);}//构造方法LinkList::LinkList() { head = new LNode(); head -> next = NULL;}//创建单链表void LinkList::createList() { LNode* tail = head; ElemType x; cout << "尾插法,请输入整数,输入999截止" << endl; while (cin >> x) { if (x == 999) { return; } LNode* p = new LNode; p->data = x; p->next = NULL; tail->next = p; tail = p; }}//打印单链表void LinkList::displayList() { LNode* p = head->next; while (p) { cout << p->data << " "; p = p->next; } cout << endl;}//获取单链表头结点地址LNode * LinkList::getHead() { return head;}//菜单void menu(LinkList* list) { int a; cout << "************************************" << endl; cout << "** C++链表的文件存取问题 **" << endl; cout << "************************************" << endl; while (1) { system("pause"); system("cls"); cout << "********************************" << endl; cout << "* 1.创建单链表。 *" << endl; cout << "* 2.打印单链表。 *" << endl; cout << "* 3.保存单链表。 *" << endl; cout << "* 4.读取单链表。 *" << endl; cout << "* 5.按其它键退出并保存。*" << endl; cout << "********************************" << endl; cin >> a; switch (a) { case 1: list->createList(); break; case 2: list->displayList(); break; case 3: save(list); break; case 4: read(list); break; default: save(list); return; } }}//保存单链表void save(LinkList* list) { LNode* p = list->getHead()->next; ofstream outfile; outfile.open("list.txt", ios::binary); if (!outfile) { cerr << "open failed" << endl; return; } while (p) { //cout << p->data << endl; outfile.write((char*)p, sizeof(LNode)); p = p->next; } outfile.close(); cout << "链表已保存到 list.txt" << endl;}//读取单链表void read(LinkList* list) { LNode* p = list->getHead(); ifstream infile; infile.open("list.txt", ios::binary); if (!infile) { cout << "打开文件失败" << endl; } /* * infile.eof()、iFlie.peek()会多读一行 */ while (infile.peek() != EOF) { LNode* q = new LNode; infile.read((char*)q, sizeof(LNode)); cout << q->data << endl; q->next = NULL; p->next = q; p = q; } cout << "链表读取成功" << endl;}
转载地址:http://yykrf.baihongyu.com/