如何实现线性表的建立 删除 插入 操作的完整程序

我知道子函数是什么,可是它怎么在完整的程序里实现呢,就是有main函数的那个完整程序,谁知道帮忙写下,谢谢~~~~~~~

c++语言

C++] 一般线性链表类的C++实现
以下的C++类LinkList实现了线性链表的一般操作。可以直接在其他的程序中直接建立它的对象,其中线性表中的数据在此为整型,具体应用的时候可以适当的修改,并可以在此基础上继续封装特定的功能。

头文件:LinkList.h

typedef struct LNode {
int data;
struct LNode *next;
}LNode, *pLinkList;

class LinkList {
private:
pLinkList m_pList;
int m_listLength;
public:
LinkList();
~LinkList();
bool InitList ();
bool DestroyList ();
bool ClearList();
bool IsEmpty ();
int GetLength ();
bool GetNode(int position, LNode** node);
int LocateElem(int elem);
bool SetNodeData(int position, int newData);
bool GetNodeData(int position, int &data);
bool InsertNode(int beforeWhich, int data);
bool DeleteNode(int position);
};

Cpp文件:LinkList.cpp

#include <iostream.h>
#include "LinkList.h"

LinkList::LinkList() {
m_pList = NULL;
m_listLength = 0;

InitList();
}

LinkList::~LinkList() {
if (!DestroyList()) {
DestroyList();
}
}

//初始化,分配一个头节点。
bool LinkList::InitList() {
if (!(m_pList = new LNode)) {
return false;
}
m_pList->next = NULL;

return true;
}

//销毁链表。
bool LinkList::DestroyList() {
if (!ClearList()) {
return false;
}

delete m_pList;

return true;
}

//判断链表是否为空。若为空,返回true,否则返回false。
bool LinkList::IsEmpty() {
if (m_pList->next == NULL) {
return true;
}
return false;
}

//返回链表的中当前节点数。
int LinkList::GetLength() {
return m_listLength;
}

//将链表清空,释放当前所有节点。
bool LinkList::ClearList() {
if (m_pList == NULL) {
return false;
}

LNode *pTemp = NULL;
while (m_pList->next != NULL) {
pTemp = m_pList->next;
m_pList->next = pTemp->next;
delete pTemp;
}
m_listLength = 0;

return true;
}

//将position指定的节点内的数据设置为newData。
//第一个有效节点的position为1。
bool LinkList::SetNodeData(int position, int newData) {
LNode *pTemp = NULL;

if (!(GetNode(position, &pTemp))) {
return false;
}

pTemp->data = newData;

return true;
}

//得到指定位置节点的数据。
//节点索引从1到listLength。
bool LinkList::GetNodeData(int position, int &data) {
LNode *pTemp = NULL;

if (!(GetNode(position, &pTemp))) {
return false;
}

data = pTemp->data;

return true;
}

//在链表中插入一个节点。
//插入的位置由beforeWhich指定,新节点插入在beforeWhich之前。
//beforeWhich的取值在1到ListLength+1之间。
bool LinkList::InsertNode(int beforeWhich, int data) {
LNode *pTemp = NULL;

if (beforeWhich < 1 || beforeWhich > (m_listLength + 1)) {
return false;
}

if (!(GetNode(beforeWhich - 1, &pTemp))) {
return false;
}

LNode *newNode = new LNode;
newNode->data = data;
newNode->next = pTemp->next;
pTemp->next = newNode;

m_listLength++;

return true;
}

//删除一个指定的节点。
//节点位置由position指定。
//positon的值从1到listLength。
//若链表为空或指定的节点不存在则返回false。
bool LinkList::DeleteNode(int position) {
if (position < 1 || position > m_listLength) {
return false;
}

LNode *pTemp = NULL;
if (!(GetNode(position - 1, &pTemp))) {
return false;
}

LNode *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
delete pDel;

m_listLength--;

return true;
}

//得到指定位置节点的指针。
bool LinkList::GetNode(int position, LNode **node) {
LNode *pTemp = NULL;
int curPos = -1;

pTemp = m_pList;
while (pTemp != NULL) {
curPos++;
if (curPos == position)
break;
pTemp = pTemp->next;
}

if (curPos != position) {
return false;
}

*node = pTemp;

return true;
}

//定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
//节点索引从0开始到listLength。
int LinkList::LocateElem(int elem) {
LNode *pTemp = NULL;
int curIndex = 1;

pTemp = m_pList->next;
while ((pTemp != NULL) && (pTemp->data != elem)) {
pTemp = pTemp->next;
curIndex++;
}

if (pTemp == NULL) {
return 0;
}

return curIndex;
}

/*
int main(){
LinkList l;

l.InsertNode(1, 10);
l.InsertNode(2, 20);
l.InsertNode(3, 30);
l.InsertNode(4, 40);
cout << l.GetLength() << endl;

int dataTemp = 0;
for (int i = 1; i <= l.GetLength(); i++) {
l.GetNodeData(i, dataTemp);
cout << dataTemp << endl;
}

if (l.SetNodeData(3, 50)) {
cout <<"DONE\n";
} else {
cout << "Failed\n";
}

for (i = 1; i <= l.GetLength(); i++) {
l.GetNodeData(i, dataTemp);
cout << dataTemp << endl;
}

if (l.DeleteNode(4)) {
cout <<"DONE\n";
} else {
cout << "Failed\n";
}

for (i = 1; i <= l.GetLength(); i++) {
l.GetNodeData(i, dataTemp);
cout << dataTemp << endl;
}

cout << l.LocateElem(50) << endl;
return 0;
}
*/
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-03-06
【知识点】
若矩阵A的特征值为λ1,λ2,...,λn,那么|A|=λ1·λ2·...·λn

【解答】
|A|=1×2×...×n= n!
设A的特征值为λ,对于的特征向量为α。
则 Aα = λα
那么 (A²-A)α = A²α - Aα = λ²α - λα = (λ²-λ)α
所以A²-A的特征值为 λ²-λ,对应的特征向量为α

A²-A的特征值为 0 ,2,6,...,n²-n

【评注】
对于A的多项式,其特征值为对应的特征多项式。
线性代数包括行列式、矩阵、线性方程组、向量空间与线性变换、特征值和特征向量、矩阵的对角化,二次型及应用问题等内容。
第2个回答  2015-11-10
如果是插入操作 则在定义一个指针 f,以在头结点插入数据为例
f -> next = head -> next , head -> next = f
如果是删除操作,定义一个指针 m ,以删除头结点后一节点为例
head -> next = m -> next , free ( m )
希望对你有帮助

如何实现线性表的建立 删除 插入 操作的完整程序
以下的C++类LinkList实现了线性链表的一般操作。可以直接在其他的程序中直接建立它的对象,其中线性表中的数据在此为整型,具体应用的时候可以适当的修改,并可以在此基础上继续封装特定的功能。头文件:LinkList.h typedef struct LNode { int data;struct LNode *next;}LNode, *pLinkList;class Link...

用C语言实现线性表的顺序存储(创建,插入,删除和查找)
STUDENT* create_linkbyfile(char *filename)\/\/功能:读取文件,创建链表\/\/参数:如果filename不为空,则打开该文件,如果filename为空,要求输入文件位置\/\/创建的链表的所有结点的next全部修改,指向物理地址上的下一个结点{ system("cls"); FILE *fp; STUDENT *head,*ptemp,*pnew; head=NULL;\/\/初始化head为空 ...

用C++方法实现顺序表线性表的建立、插入、删除和逆转操作。并用主函数...
cout<<"要插入元素的位置:"<<endl;int i;cin>>i;cout<<"要插入的元素:"<<endl;ElemType x;cin>>x;

怎样C++实现线性表的建立、插入、删除、倒序?
void InsertList(SeqList *L,DataType newelem,int position); \/\/在顺序表L中插入元素newelem,位置为position void DeleteList(SeqList *L,int position); \/\/在顺序表L中删除位置为position的元素 void Sort1List(SeqList *L); \/\/对顺序表L进行直接插入排序 void Sort2List(SeqList *L); \/\/对顺序表L进...

线性表的创建,删除插入等操作
插入:在第t个位置插入元素,需要将从第t个位置到第n个位置向后移动。删除:删除第t个元素,从t+1位置元素往前移动 插入和删除都需要将元素移动,顺序存储结构线性表所需要的平均时间复杂度为O(n)。下面是根据数据结构实现的代码;include include define TRUE 1;define FALSE 0;define OK 1;define ...

编写一个程序,实现顺序表的建立,插入,查找,删除等操作
else { for ( j=L->last; j >=i; j-- ){ L->data[j+1] = L->data[j];} L->data[i] = x; L->last++;return 1; \/\/插入成功 } } int Delete ( Sequenlist *L, int i )\/\/删除某一位置的数据 { \/\/在表中删除节点i int j;...

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
\/*头插法-建立单链表*\/ LinkList HeadCreate(LinkList la){ int num;la=(LinkList)malloc(sizeof(LNode));\/\/建立头结点 la->next=NULL;scanf("%d",&num);while(num!=10){ LNode *p=(LinkList)malloc(sizeof(LNode));p->data=num;p->next=la->next;la->next=p;scanf("%d",&...

完成线性表的插入和删除运算的图形模拟演示
合理设计窗口界面,首先创建一个线性表,线性表的元素通过友好界面输入,建立后的线性表在窗口界面上显示出来;通过对话框输入要插入和删除的元素及... 线性表的存储结构由学生自行选择。合理设计窗口界面,首先创建一个线性表,线性表的元素通过友好界面输入,建立后的线性表在窗口界面上显示出来;通过对话框输入要插入和删除...

如何建立一个顺序存储的线性表,实现线性表的插入、删除操作
\/\/生成一个要插入的结点 q=(Linklist)malloc(sizeof(Linklist));\/\/申请要插入的结点空间 q->data=d;\/\/填充要插入结点的数据域 q->next=p->next;\/\/首先填充要插入结点q的指针域进行填充。p->next=q;\/\/然后把定位好的p指针域进行修改指向q.}while(9);\/\/循环退出的条件是输入的数据-9999 ...

一个线性表采用顺序表表示,设计一个算法,删除其中所有值等于X的元素...
操作结果:销毁顺序线性表L *\/void DestroyList(SqList *L) { free(L->elem);L->elem=NULL;L->length=0;L->listsize=0;}\/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 *\/\/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 *\/Status ListInsert(SqList *L,...

相似回答