问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急求用C++做顺序表,单链表 万分感谢!!!

发布网友 发布时间:2022-05-05 04:55

我来回答

2个回答

热心网友 时间:2022-07-01 17:21

// can---顺序表类.cpp : 定义控制台应用程序的入口点。
//线性表是一个容器
//警告,一下部分不得乱改。
#include "stdafx.h"
#include <iostream>
using namespace std;
#define ListIncrement 10
template<class T>
class List{
int capacity;
int size;
T*p;
public:
List();
~List();
void ClearList();
bool List_is_empty();
int Get_capacity();
int Get_size();
T*Get_p();
List<T>&operator=(List<T>&A);
int ListLength();
T GetElem_at(int i);
int LocateElem(T e);
T PriorElem(T e);
T NextElem(T e);
void IncreatCapacity(); //当需要是会自动扩大capacity;
void ReceCapacity(); //当capacity过大时会自动的减小capacity;
void pushback(T e);
void insert(int i,T e);
void delet(int i);
void combin(List<T>&A,List<T>&B);
void show();
};
template<class T>
List<T>::List():capacity(20),size(0){
p=new T[24];
memset(p,0,24*sizeof(T));
}
template<class T>
List<T>::~List(){
delete[]p;
}
template<class T>
int List<T>::Get_capacity(){
return this->capacity;
}
template<class T>
int List<T>::Get_size(){
return this->size;
}
template<class T>
T*List<T>::Get_p(){
return this->p;
}
template<class T>
List<T>& List<T>::operator =(List<T> &A){
delete[]p;
p=new T[A.capacity+4];
this->capacity=A.capacity;
this->size=A.size;
memset(p,0,sizeof(T)*(this->capacity+4));
memcpy(p,A.Get_p(),sizeof(T)*A.capacity);
return *this; //爽啊
}
template<class T>
void ClearList(){
memset(p,0,24*sizeof(T));
}
template<class T>
bool List<T>::List_is_empty(){
if(this->size==0)return 1;
else return 0;
}
template<class T>
int List<T>::ListLength(){
return this->size;
}
template<class T>
T List<T>::GetElem_at(int i){
return *(p+i-1);
}
template<class T>
int List<T>::LocateElem(T e){
for(int i=1;i<=this->size;i++){
if(*(p+i-1)==e)return i;
}
return 0;
}
template<class T>
T List<T>::PriorElem(T e){
int j;
j=this->LocateElem(e);
if(j<=1){
cout <<"该元素没有前驱或不存在\n";
return 0;
}
else return *(p+j-2);
}
template<class T>
T List<T>::NextElem(T e){
int j;
j=this->LocateElem(e);
if(j==0||j==this->size){
cout <<"该元素后驱不存在\n";
return 0;
}
else return *(p+j);
}
template<class T>
void List<T>::IncreatCapacity(){
if(this->size==this->capacity){
T*q=new T[this->capacity+ListIncrement+4];
memset(q,0,sizeof(T)*(this->capacity+ListIncrement+4));
memcpy(q,p,this->capacity*sizeof(T));
delete[]p;
p=q;
this->capacity+=ListIncrement;
}
}
template<class T>
void List<T>::ReceCapacity(){
if(this->capacity-this->size>=20){
T*q=new T[this->capacity-16];
memset(q,0,sizeof(T)*(this->capacity-16));
memcpy(q,p,sizeof(T)*(this->size));
delete[]p;
p=q;
this->capacity-=20;
}
}
template<class T>
void List<T>::pushback(T e){
this->IncreatCapacity();
*(p+this->size)=e;
this->size++;
}
template<class T>
void List<T>::insert(int i,T e){
this->IncreatCapacity();
for(int j=this->size;j>=i;j--){
*(p+j)=*(p+j-1);
}
*(p+i-1)=e;
this->size++;
}
template<class T>
void List<T>::delet(int i){
for(int j=i;j<this->size;j++){
*(p+j-1)=*(p+j);
}
memset((p+this->size-1),0,sizeof(T));
this->size--;
this->ReceCapacity();
}
template<class T>
void List<T>::combin(List<T>&A,List<T>&B){
int i=1,j=1;
while(i<=A.ListLength()&&j<=B.ListLength()){
if(*(A.Get_p()+i-1)<=*(B.Get_p()+j-1)){
this->pushback(*(A.Get_p()+i-1));
i++;
}
else{
this->pushback(*(B.Get_p()+j-1));
j++;
}
}
if(i<=A.ListLength()){
while(i<=A.ListLength()){
this->pushback(*(A.Get_p()+i-1));
i++;
}
}
else {
while(j<=B.ListLength()){
this->pushback(*(B.Get_p()+j-1));
j++;
}
}
}
template<class T>
void List<T>::show(){
for(int i=1;i<=this->size;i++){
cout <<this->GetElem_at(i)<<' ';
}
cout <<endl;
}
//以上部分不得随便乱改。
List<int>B;
List<int>A;
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=1;i<16;i++){
B.pushback(i);
}
B.show();
A=B;
A.show();
return 0;
}

热心网友 时间:2022-07-01 17:22

指针操作的单链表,简单实现,各段代码清晰!
#include <iostream>
using namespace std;

typedef int elemtype;

struct lnode
{
lnode *next;
elemtype data;
};

void initlist(lnode *& hl)
{
hl=new lnode;
hl->next=NULL;
}

elemtype getlist(lnode *& hl,int pos)
{
int i=0;
hl=hl->next;
while(hl!=NULL)
{
i++;
if(i==pos) break;
hl=hl->next;
}
return hl->data;
}

void traverlist(lnode *hl)
{
hl=hl->next;
while(hl!=NULL)
{
cout<<hl->data<<" ";
hl=hl->next;
}
cout<<endl;
}

bool insertlist(lnode *&hl,int pos,elemtype item)
{
lnode *p=hl;
int j=0;
while(p!=NULL&&j<pos-1)
{
p=p->next;
j++;
}
if(p==NULL) return 0;
lnode *newptr=new lnode;
newptr->data=item;
newptr->next=p->next;
p->next=newptr;
return 1;
}

/*bool DeleteList(lnode *&hl,int pos,ElemType &item)
{
lnode *p=GetList(hl,pos-1);
if( p==NULL ) return 0;
lnode *q=p->next;
item=q->data;
p->next=q->next;
delete q;
return 1;
}*/

void CreateList(lnode * &hl,int n)
{
lnode *ptr;
hl=new lnode ;
hl->next=NULL;
for(int i=n;i>0;i--)
{
ptr=new lnode ;
cin>>ptr->data;
ptr->next=hl->next; hl->next=ptr;
}
}

void main()
{
int a[10];
lnode *s;
initlist(s);
for(int i=0;i<10;i++)
{
cin>>a[i];
insertlist(s,1,a[i]);
}
traverlist(s);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑wifi已禁用怎么打开电脑无线网络禁用了怎么恢复 ...禁用网络在哪重开win7笔记本无线网络被禁用了怎么办 win7网络禁用怎么恢复 windows7网络被禁用怎么恢复 Win7系统本地连接禁用了怎么恢复Win7系统启动本地连接的两种方法图文... 梦见家人去世什么预兆 ...经缝针现在基本痊愈,一个月过去了现在就是小腿还不能贴大腿,最近感... 小腿缝针拆线三个月了表皮长好了里面的肉怎么有点带黑红色还有点白色... 小腿迎面骨掉快深宽都1厘米左右的肉。当时没缝针。已经20天了。天天... 运费和快递费各走 什么科目? 快递费用放什么科目 数据结构里创建顺序表如何做呀??我这样写怎么改呀 链表和顺序表各基本操作各有什么特点? C语言中的顺序链表怎么做啊 数据结构中的顺序表怎么编写??? 怎么定义一个顺序表啊?急!!! 平板电脑怎么才能恢复出厂设置?刷机行吗? photoshop怎么绘图? 华为Mate 40参数性价比怎么样? AE能做延时摄影后期的镜头平移吗? AE CC做延时摄影的详细步骤 EDIUS或者AE做出 延时拍摄特效 如何用ae做延时拍摄,,照片做好了,就差后期了,在ae里面需要设置什么吗? 小白求助,怎么用ae合成延时摄影 龙姓贤字辈取名,去什么名字 用AE如何制作延时摄影? 龙姓张姓男孩名字 麻烦取个名字。 神经内科的医生能看懂心电图吗? 在AE里怎么延迟视频时间,然后在后面加点东西进去。 姓龙的 单字 只要一个字的 多谢各位的热情 数据结构中顺序表 typedef struct{ ElemType *elem; int length; int listsize; } 插入元素怎么做? 怎样下载歌曲MV到U盘,请详细步骤,图解更好 成都理工几本? 看明星如何搭配白衬衫 衬衫打个结,怎么搭都时髦,哪些明星也这样穿? 成都理工大学是否是一本大学 明星穿衣搭配:看范冰冰乔欣的拼接衬衫怎么搭配 中国戏曲中的人物按角色分为生、旦、净、末、丑,哪一个是女角色的统称 中国戏曲中的人物角色可分为生、旦、净、末、丑,以下哪一个是女角色的统称 生、旦、净、末、丑中,哪个专指女性角色? 生旦净末丑哪个是女角色 分享让你觉得有价值的社群 如何玩转社群? 如何将PDF格式的内容转换到WORD 中 神经系统的作用是什么 人体神经系统的重要性 神经系统对身体有哪些作用? 神经系统起什么作用 神经系统的作用 什么是债权抵押