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

采用表尾插入元素创建一个单链表。

发布网友 发布时间:2024-05-14 12:23

我来回答

3个回答

热心网友 时间:2024-05-31 13:25

#include<iostream>

using namespace std;

template <typename T>class List;
template <typename T>
class Node
{
friend class List<T>;
private:
T data;
Node<T>* next;
public:
Node(){data=NULL;next=NULL;}
Node(T& da) {data =da;next=NULL;}
Node(T& da,Node<T>* ne) {data=da;next = ne};
};

template <typename T>
class List
{
private:
int length;
Node<T>* head;//头结点,其next节点为第一个节点
Node<T>* last;//指向最后一个结点的指针
public:
List();
void insert (T& data);
void remove (T data);
int getLength() const{return length;};
void print () const;
void reverse();
};
template <typename T>
List<T>::List()
{
length = 0;

head = new Node<T>();
last = head;

}
template <typename T>
void List<T>::insert(T &data)
{
last = last ->next =new Node<T>(data);
length++;
}

template <typename T>
void List<T>::remove(T data)
{
Node<T>* current = head;
while (current->next!=NULL)
{
if(current->next->data==data)
{
Node<T>* temp = current->next;
current->next = current->next->next;
delete temp;
length--;
}
else
current = current->next;
}
}

template <typename T>
void List<T>::print() const
{
Node<T>* current =head;
while (current->next!=NULL)
{
current = current->next;
cout<<current->data<<" ";
}
}

template <typename T>
void List<T>::reverse()
{
Node<T>* temp1;//利用三个临时指针降List中每个结点的next倒向
Node<T>* temp2;
Node<T>* temp3;

last = head->next;
temp1 = head;
temp2 = temp1->next;

while(temp2!=NULL)
{
temp3 = temp2->next;
temp2->next = temp1;
temp1 = temp2;
temp2 = temp3;
}//倒向完毕
last->next = NULL;//重新设置head和last
head->next = temp1;
}

int main ()//测试代码
{
List<int> one;
int i1=34,i2=89,i3=232;
one.insert(i1);
one.insert(i1);
one.insert(i1);
one.insert(i1);
one.insert(i2);
one.insert(i3);
one.print();
cout<<endl;
one.reverse();
one.print();
cout<<endl;
one.remove(34);
one.print();
}

我用的是vc2008,应该没问题,都按照要求了

热心网友 时间:2024-05-31 13:24

第一个问题:
#include "stdio.h"
typedef struct lnode
{
int data;
struct lnode *next;
}lnode,*link;
lnode *creat()用尾插入元素创建一个单链表函数;
{
link La,p,q;int i,n;
La=(link)malloc(sizeof(lnode));创建头结点
La->next=NULL;
q=La;
printf("input the number of element n:\n");
scanf("%d",&n);输入创建元素的个数n
for(i=1;i<=n;++i)
{
p=(link)malloc(sizeof(lnode));生成结点并用p指向
printf("input the value of %dth:\n",i);
scanf("%d",&p->data);输入元素的值
printf("\n");
q->next=p;q=p;
}
q->next=NULL;将最后一个结点的next指向空
return (La);返回头结点的指针
}
void out(lnode *La)完成链表的输出函数
{
link p;
p=La->next;
printf("success output the every element:\n");
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
lnode *Lc,*Ld;
Lc=creat();
out(Lc);
}
我用的版本stdio里面包函了malloc函数,如果你用的没有的话,需在最前面引用到源程序文件中去;程序的功能是尾插入法创建一个大小由你输入的n的大小决定的一个带头结点的单链表;运行的时候,先提示你输入n,(n就是要创建的元素个数),然后提示你输入每个元素(由于为了方便,定义元素为int型,当你输入n个数后;则显示创建结果;
第二个问题:
#include "stdio.h"
typedef struct lnode
{
int data;
struct lnode *next;
}lnode,*link;
lnode *creat()
{
link La,p,q;int i,n;
La=(link)malloc(sizeof(lnode));
La->next=NULL;
q=La;
printf("input the number of element n:\n");
scanf("%d",&n);
for(i=1;i<=n;++i)
{
p=(link)malloc(sizeof(lnode));
printf("input the value of %dth:\n",i);
scanf("%d",&p->data);
printf("\n");
q->next=p;q=p;
}
q->next=NULL;
return (La);
}
void out(lnode *La)
{
link p;
p=La->next;
printf("success output the every element:\n");
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
}
lnode *lizhi(lnode *Lb)与上一个程序不同之处是多了这个函数,实现单链表
{ lnode *p,*s;的就地逆置;
p=Lb->next;
Lb->next=NULL;
s=p->next;
while(p)
{
p->next=Lb->next;
Lb->next=p;
p=p->next;
p=s;
s=s->next;
}
return (Lb);
}
void main()
{
lnode *Lc,*Ld;
Lc=creat();
out(Lc);
Ld=lizhi(Lc);
out(Ld);
}
与上一个程序差不多,唯一不同的是多了一个逆置函数;
以上两个程序都可以成功运行的,你拿去试试吧,祝你成功。

热心网友 时间:2024-05-31 13:27

#include<iostream>
using
namespace
std;
template
<typename
T>class
List;
template
<typename
T>
class
Node
{
friend
class
List<T>;
private:
T
data;
Node<T>*
next;
public:
Node(){data=NULL;next=NULL;}
Node(T&
da)
{data
=da;next=NULL;}
Node(T&
da,Node<T>*
ne)
{data=da;next
=
ne};
};
template
<typename
T>
class
List
{
private:
int
length;
Node<T>*
head;//头结点,其next节点为第一个节点
Node<T>*
last;//指向最后一个结点的指针
public:
List();
void
insert
(T&
data);
void
remove
(T
data);
int
getLength()
const{return
length;};
void
print
()
const;
void
reverse();
};
template
<typename
T>
List<T>::List()
{
length
=
0;
head
=
new
Node<T>();
last
=
head;
}
template
<typename
T>
void
List<T>::insert(T
&data)
{
last
=
last
->next
=new
Node<T>(data);
length++;
}
template
<typename
T>
void
List<T>::remove(T
data)
{
Node<T>*
current
=
head;
while
(current->next!=NULL)
{
if(current->next->data==data)
{
Node<T>*
temp
=
current->next;
current->next
=
current->next->next;
delete
temp;
length--;
}
else
current
=
current->next;
}
}
template
<typename
T>
void
List<T>::print()
const
{
Node<T>*
current
=head;
while
(current->next!=NULL)
{
current
=
current->next;
cout<<current->data<<"
";
}
}
template
<typename
T>
void
List<T>::reverse()
{
Node<T>*
temp1;//利用三个临时指针降List中每个结点的next倒向
Node<T>*
temp2;
Node<T>*
temp3;
last
=
head->next;
temp1
=
head;
temp2
=
temp1->next;
while(temp2!=NULL)
{
temp3
=
temp2->next;
temp2->next
=
temp1;
temp1
=
temp2;
temp2
=
temp3;
}//倒向完毕
last->next
=
NULL;//重新设置head和last
head->next
=
temp1;
}
int
main
()//测试代码
{
List<int>
one;
int
i1=34,i2=89,i3=232;
one.insert(i1);
one.insert(i1);
one.insert(i1);
one.insert(i1);
one.insert(i2);
one.insert(i3);
one.print();
cout<<endl;
one.reverse();
one.print();
cout<<endl;
one.remove(34);
one.print();
}
我用的是vc2008,应该没问题,都按照要求了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大同四区和市区的区别 大同云冈属于哪里 大同市云冈区建成区范围都有哪些 it wasn't long before i found a job.---before是什么意思 It wasn't long before a man from It wasn't long before和It won't be long before有什么区别吗? it wasn't long before和it won't be long before有什么不同?_百度知 ... 微信怎么查和一个好友的红包记录 马龙巴黎奥运会夺冠了吗 明天是中国的情人节??? 昌黎在朝阳什么方向 苗三叔老花眼是真品吗? 购买跃层好不好?装修跃层的注意事项 跃层式住宅好吗到底该不该买 老版再向虎山行中姜铁山是哪个演的? 和女朋友吵架,你能吵赢算我输评论区告诉我怎么哄回猫猫? 王老师有14朵红花平均分给几位同学正好分完?有几种方法 六安中天勤税务师事务所有限公司怎么样? 中考体育考试穿什么衣服呢? ...放入草缸它会自己去吃吗?还有现在20只多久喂一次?一次喂多少... nfc能读出电梯卡信息吗? 发动机皮带多少公里需要更换呢? 岳飞的师傅叫什么名字 word表格线怎么对齐word表格线怎么对齐调整 如何让表格两边的边框线对齐? 增值税普票的机子在哪里看开了多少金额 打完胎适合吃西红柿鸡蛋面 眼睛睁开的非常的慢成语 如何看待人权与民权的关系 人民人民,人权与民权有区别与联系吗? 头孢类能和德巴金能一起吃吗 荆州古城内有修车的吗 4070super要什么电源? 世界上有多少种元素 江铃顺达正时皮带怎么对记号? 柴油货车江铃顺达电喷的!正时怎么对!有哪位修车的师傅指点一下!_百 ... 面试一组12人会有几个面试成功 高三了得了滑膜炎怎么办那 请问魅族手机充满电不拔充电器还会有这个闪电图标吗 邯郸京娘湖景色怎么样? 去武安京娘湖旅行的感受如何? 编号15位是什么意思? 不用身份证怎么认证实名制微信 我想问问注册微信号需要身份证号码吗 上海宝山宝钢厂区一共有几个门可以出入 蒂芙尼黄钻戒指贵吗 stay away today saturday的音标分别是什么 电视色彩调到多少合适 显示器什么色彩对孩子眼睛好呢? 成都梁家巷汽车站到火车东站怎么走?