链表实现一元多项式运算
C.Unit(); if(choice != C.Poly.length()) //当有项消去时输出该部分 { cout<<\ cout<>choice; cout<void main() //主函数调用部分 { Cinhelp(); }
共7页
6
链表实现一元多项式运算
一元多项式运算功能 输入截图:
一元多项式运算功能 结果输出截图:
共7页
7
链表实现一元多项式运算
//以部分为头文件SimpleLinkList.h部分,用该部分替换顶部的#include\应用\\数据结构\\DataStruct\\SimpleLinkList.h\ 可实现一元多项式功能
#include
//结点类模板
template struct node { ET data; //结点数据域,存储该结点的数据部分 node* next; //结点指针域,指示下一个节点的位置 node(){ next = NULL; } //无参数结点构造函数,用于未给定参数时结点的初始化 node(ET dat, node* link){ data = dat; next = link; } //给定参数结点构造函数,构造给定数据和指针的结点 };
//简单线性链表类 Pag 52 template class SimpleLinkList { protected: int count; //用于计数表元素个数,即表长 node* head; //顺序表起始位置指针 public: SimpleLinkList(){ count=0; head = new node; } //简单线性链表构造函数 ~SimpleLinkList(){ Clear(); delete head; } //简单线性链表析构函数
//简单线性链表相关操作 bool Empty(){ return count == 0; } //表是否为空 void Clear(); //表清空,置元素个数为0 void Show(); //输出现实表中现有的所有元素 node* GetPtr(int postion); //获取指向第pos个位置节点的指针
共7页
8
链表实现一元多项式运算
void SetElem(ET &e); //向表中末位写入元素e,元素总数加一 void ReSetElem(int pos, ET &e); //重置表中第pos个位置元素的数据部分为e,元素总数不变 void Insert(int pos, ET &e); //向表中第pos个位置插入新的结点元素,元素总数加一 void GetElem(int pos, ET &e); //从表中获取第pos元素,写入e中,由e输出 void DelElem(int pos); //删除表中第pos个位置的元素.元素减一 void operator=(SimpleLinkList& cop); //赋值符重载函数,实现简单线性链表的复制功能 void SUB(SimpleLinkList &A, SimpleLinkList &B); //实现表相减,将仅存在于A中的元素写入当前链表 void ADD(SimpleLinkList &A, SimpleLinkList &B); //实现链表相加,将表A 表B中的元素依次写入当前链表 void Seprate(); //奇偶分离函数,使得所有奇数均排列在偶数前 void Sort(); //对链表中的元素进行排序 void Reserve(); //对线性链表逆序 void ResHelp(int &tmp); //线性链表逆序辅助函数 void CinHelp(); //提示输入函数,用于实现键盘输入交互式操作 };
template
void SimpleLinkList::Clear() { while(count) DelElem(1); //当表中有元素时 }
template
void SimpleLinkList::Show() { int cot = count; ET tmp; node* shw = head; //指向头指针的第一个后继 cout<0) //当表中有元素时 { shw = shw->next; //每输出一位向后移动一位 tmp = shw->data; cout<共7页
9
链表实现一元多项式运算
cot --; //计数元素总数减一 } cout<template
node* SimpleLinkList::GetPtr(int postion) { int pos = postion; node* ElemPtr; if(pos==0) return head; else if(pos<1 || pos>count+1) cout<next; while(pos>1) { ElemPtr = ElemPtr->next; pos--;} //不断指向下一个结点,头指针所在位置为零 } return ElemPtr; }
template
void SimpleLinkList::SetElem(ET &e) { node* prt = GetPtr(count); //获取指向最后一个结点的指针 prt->next = new node; //将最后一个节点的后继指向新的结点 count++; //置入表中不存在的元素,元素总数加一 prt->next->data = e; //将e写入后继结点的数据部分 }
template
void SimpleLinkList::ReSetElem(int pos, ET &e) { if(pos<1 || pos>count) cout<data = e; //重置表中元素,元素总数不变 }
template
void SimpleLinkList::Insert(int pos, ET &e) { //在第pos个位置插入一个新结点 if(pos<1 || pos>count+1) cout<共7页
10