2 Star 0 Fork 0

nonitem/shujujiegou

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
linearList.cpp 5.69 KB
一键复制 编辑 原始数据 按行查看 历史
nonitem 提交于 2023-03-20 10:22 . 数据结构实验一 顺序表与链表
#include "linearList.h"
#include<iostream>
using namespace std;
//顺序表打印
void sequenceList::print()
{
cout << curNumberOfItem << ":";
for(int i = 0; i < curNumberOfItem-1; i++)
{
cout << myList[i] << ",";
}
cout << myList[curNumberOfItem-1] << endl;
}
//链表打印
void linkList::print()
{
curNode = firstNode;
cout << listSize << ":";
while(curNode != lastNode)
{
if(curNode->next == lastNode)
cout << curNode->next->data << endl;
else
{
cout << curNode->next->data << ",";
}
curNode = curNode->next;
}
}
sequenceList::sequenceList(const int &a, const int &b, float p[])
{
maxCapcity=a;
myList=new float[b];
curNumberOfItem=b;
for(int i=0;i<b;i++)
{
myList[i]=p[i];
}
}
sequenceList::~sequenceList()
{
delete[] myList;
}
bool sequenceList::addItem(const float& data)
{
if(curNumberOfItem>=maxCapcity)return false;
else
{
myList[curNumberOfItem]=data;
curNumberOfItem++;
return true;
}
}
bool sequenceList::insertItem(const int& index,const float& data)
{
if (myList!=NULL&&index<=curNumberOfItem&&curNumberOfItem<maxCapcity&&index>-1)
{
curNumberOfItem++;
for (int i=curNumberOfItem-2;i>=index;i--)
myList[i+1]=myList[i];
myList[index]=data;
return true;
}
return false;
}
int sequenceList::deleteItem(const float& data)
{
for(int i=0;i<curNumberOfItem;i++)
{
if(myList[i]==data)
{
for(int j=i;j<curNumberOfItem;j++)
{
myList[j]=myList[j+1];
}
curNumberOfItem--;
return i;
}
}
return -1;
}
bool sequenceList::locate(const int& index, float& data)
{
if(index>-1&&index<curNumberOfItem)
{
data=myList[index];
return true;
}
return false;
}
int sequenceList::locate(const float &data)
{
for(int i=0;i<curNumberOfItem;i++)
{
if(myList[i]==data)
return i;
}
return-1;
}
void sequenceList::reverse()
{
for(int i=0,j=curNumberOfItem-1;i<=j;i++,j--)
{
float s=myList[j];
myList[j]=myList[i];
myList[i]=s;
}
}
linkList::linkList(const int& len, float link[])
{
firstNode=new listNode;
firstNode->next=new listNode;
lastNode=new listNode;
listSize=len;
listNode* head=firstNode->next;
for(int i=0;i<len-1;i++)
{
head->next=new listNode;
head->data=link[i];
head=head->next;
}
head->data=link[len-1];
lastNode = head;
}
linkList::~linkList(){}
bool linkList::headInsertItem(const float& num)
{
listNode* temp=new listNode;
if(temp==nullptr) return false;
temp->data=num;
temp->next=firstNode->next;
firstNode->next=temp;
listSize++;
return true;
}
bool linkList::tailInsertItem(const float& num)
{
listNode* temp=new listNode;
if(temp==nullptr) return false;
temp->data=num;
lastNode->next=temp;
lastNode=temp;
listSize++;
return true;
}
int linkList::insertItem(const int& index,const float& num)
{
listNode* curNode=firstNode->next;
listNode* temp=new listNode;
if(temp==nullptr) return -1;
for(int i=0;i<index;i++)
{
curNode=curNode->next;
}
temp->data=num;
temp->next=curNode->next;
curNode->next=temp;
listSize++;
return index;
}
int linkList::deleteItem(const float& num)
{
int ans=-1;
bool check=0;
listNode *temp=firstNode->next;
while (temp->data==num)
{
listSize--;
firstNode->next=temp->next;
temp=firstNode->next;
if(!check)ans=0,check=true;
}
listNode *beftemp = temp;
temp=temp->next;
for (int i=1;i<listSize-1;i++,beftemp=temp,temp=temp->next)
{
while(temp->data==num)
{
listSize--;
beftemp->next=temp->next;
temp=temp->next;
if(!check)ans=i,check=true;
}
}
while (lastNode->data==num)
{
temp->next=NULL;
if(!check)ans=listSize-1,check=true;
}
return ans;
}
bool linkList::locate(const int& index, float& num)
{
if(index>=listSize) return false;
curNode=firstNode->next;
for(int i=1;i<=index;i++)
{
curNode=curNode->next;
}
num=curNode->data;
return true;
}
int linkList::locate(const float& num)
{
curNode=firstNode->next;
int i=0;
while(curNode->data!=num&&curNode->next!=NULL)
{
i++;
curNode=curNode->next;
}
if(curNode->next==NULL)return -1;
return i;
}
void linkList::ascendingOrder()
{
if(listSize<=1) return;
float a;
listNode* temp;
for(int i=1;i<listSize;i++)
{
listNode* now=firstNode->next;
for(int j=0;j<listSize-i;j++)
{
temp=now;
now=now->next;
if(temp->data>now->data)
{
a=temp->data;
temp->data=now->data;
now->data=a;
}
}
}
}
void linkList::reverse()
{
listNode *ahead=firstNode->next;
listNode *targetnow=ahead;
listNode *before=NULL;
while(targetnow!=NULL)
{
ahead=targetnow->next;
targetnow->next=before;
before=targetnow;
targetnow=ahead;
}
lastNode=firstNode->next;
firstNode->next=before;
}
void merge(linkList& a, linkList& b)
{
a=a+b;
a.ascendingOrder();
a.reverse();
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/nonitem/shujujiegou.git
[email protected]:nonitem/shujujiegou.git
nonitem
shujujiegou
shujujiegou
master

搜索帮助