赞
踩
内容:构建线性表的链式存储结构,采用动态分配方式实现单链表的初始化,数据的插入,删除,输出单链表内中各元素,求单链表的长度,实现单链表中数据结点的按值排序,实现单链表的逆置,合并两个有序的单链表(有序的a表和有序的b表合并之后的结果保存在a表中)等操作。
同时:
(1)要有能根据用户的输入来选择不同运算的菜单界面。
(2)单链表中数据元素的类型统一抽象表示为ElemType类型,具体类型不限,可以是整型、实型、字符型、或者是自己构造的一种结构体类型。
代码如下:
#include <iostream> #define ElemType int using namespace std; //带头结点的单链表类,头结点存放单链表长度 class Single_List { private: ElemType data; Single_List* next; public: Single_List() { }; //单链表的创建函数,尾插法 Single_List* Create(int len) { Single_List* prev, * head, * tail; head = new Single_List; head->data = len; head->next = NULL; prev = head; if (len == 0) { goto end; } cout << "请输入各个结点的数值:" << endl; while (len--) { int data; tail = new Single_List; cin >> data; this->attach(prev, tail, data); prev = tail; } end: return head; } void attach(Single_List* prev, Single_List* tail, int data) { tail->next = NULL; tail->data = data; prev->next = tail; } int getLength(Single_List* list) { return list->data; } //判断单链表是否为空的函数 bool Isempty(Single_List* list) { return list->data == 0; } //单链表的打印函数 void Print(Single_List* list) { if (list->Isempty(list)) { cout << "单链表为空" << endl; return; } int len = list->data; Single_List* ptrl = list->next; for (int i = 0; i < len; i++) { cout << ptrl->data << " "; ptrl = ptrl->next; } } //在第index个结点后面插入数值为data的结点的函数 Single_List* Insert(Single_List* list, int index, int data) { Single_List* prev = list; Single_List* insert; insert = new Single_List; int len = list->getLength(list); //链表为空时,无论index为多少,只能插在第一个位置 if (this->Isempty(list)) { this->attach(prev, insert, data); list->data++; return list; } //如果插入的位置大于等于链表长度直接插到末尾, index = (list->data <= index) ? list->data : index; for (int i = 0; i < index; i++) { prev = prev->next; } insert->data = data; insert->next = prev->next; prev->next = insert; list->data++; return list; } //寻找第k个结点的函数,只适用链表不为空的情况 Single_List* Findkth(Single_List* list, int k
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。