有哪位大神可以帮帮小弟啊,指导一下,关于数据结构的编程题,谢谢了

我们学的数据机构的上机题,用C或C++编的都可以啊,题目的具体要求如下:

1. 单链表的定义、创建、插入和删除操作,将数据元素显示出来。
2 . 栈、队列的顺序存储结构、链式存储结构的定义、创建、插入和删除操作,将数据 元 素显示出来。
3.二叉树的链式存储结构的数据结构定义、创建、先序和后序遍历,并将结果序列输出。
4.查找:顺序查找、二分查找
5.排序:插入排序、选择排序、冒泡排序

哪位大神可以帮些一下程序啊,我只是参考一下具体算法,尽量给一个完整可以运行的代码啊,谢谢了!!!

第一题,以前写的一个程序,你自己看看吧

#include<iostream>
using namespace std;

typedef struct node //定义一个结构体节点
{
int data;
struct node * next;
}NODE,* PNODE; //NODE=struct node;PNODE=struct node*

class MyList //创建一个类
{
private:
PNODE Head;
public:
MyList() //构造函数
{
this->Head=NULL;
}

~MyList() //析构函数
{
while(this->Head!=NULL)
{
PNODE Temp=Head->next;
delete Head;
Head=Temp;
}
}

void init() //构造一个链表
{
int a;
char b;
PNODE Tail,point;
do
{
cout<<"请输入一个节点值:"<<endl;
cin>>a;
if(Head==NULL)
{
Head=new NODE;
Head->data=a;
Head->next=NULL;
Tail=Head;
}
else
{
Tail=Head;
while(Tail->next!=NULL)
{
Tail=Tail->next;
}
point=new NODE;
point->data=a;
point->next=NULL;
Tail->next=point;
Tail=point;
}
cout<<"继续吗?(y/n)"<<endl;
cin>>b;
}while(b=='y');
}

void Add(int m) //向链表中追加节点
{
if(Head==NULL)
{
Head=new NODE;
Head->data=m;
Head->next=NULL;
}
else
{
PNODE Tail=this->Head;
while(Tail->next!=NULL)
{
Tail=Tail->next;
}
PNODE point=new NODE;
point->data=m;
Tail->next=point;
point->next=NULL;
Tail=point;
}
}

void Travel() //遍历链表中的元素,输出链表中的数据
{
PNODE Temp=this->Head;
while(Temp!=NULL)
{
cout<<Temp->data<<" ";
Temp=Temp->next;
}
cout<<endl;
}

int Sumnode() //得到链表中元素的个数
{
int i;
i=0;
PNODE Temp=this->Head;
while(Temp!=NULL)
{
i++;
Temp=Temp->next;
}

return i;
}

void Insert(int m,int k) //向链表中k之后插入一个元素
{
PNODE Temp,p1,p2,p3;
int i=0,j;
j=this->Sumnode();

if(Head==NULL)
{
cout<<"链表为空,无法插入"<<endl;
}
if(k<=0||k>j)
{
cout<<"插入不合法"<<endl;
}
if(k==1) //在头结点之后插入
{
Temp=new NODE;
Temp->data=m;
Temp->next=Head->next;
Head=Temp;

}
if(k==j) //在尾节点之后插入
{
p1=Head;
while(p1->next!=NULL)
{
p1=p1->next;
}
Temp=new NODE;
Temp->data=m;
Temp->next=NULL;
p1->next=Temp;

}
else //在其他地方插入
{
p2=this->Head;
for(i=0;i<k-1;i++)
{
p2=p2->next;
}
p3=p2->next;
Temp=new NODE;
Temp->data=m;
Temp->next=p3;
p2->next=Temp;

}
cout<<"插入成功"<<endl;
}

void Delete(int k) //删除第k个节点
{
cout<<"删除之前节点数据为:"<<endl;
Travel();
PNODE Temp,p1,p2;
int i,j;
j=this->Sumnode();
if(Head==NULL)
{
cout<<"链表为空,无法删除"<<endl;
}
if(k<=0||k>j)
{
cout<<"删除不合法"<<endl;
}
if(k==1) //删除第一个节点
{
Temp=Head->next;
delete Head;
Head=Temp;
}
if(k==j) //删除最后一个节点
{
Temp=Head;
for(i=0;i<k-2;i++)
{
Temp=Temp->next;
}
p1=Temp->next;
delete p1;
Temp->next=NULL;
}
else
{
p1=Head;
for(i=1;i<k-1;i++)
{
p1=p1->next;
}
Temp=p1->next;
p2=Temp->next;
p1->next=p2;
delete Temp;
}
cout<<"删除之后节点数据为:"<<endl;
Travel();
}

int Find(int h) //按输入的值查找所在链表中的位置
{
PNODE p1;
p1=this->Head;
int i;
i=1;
while(p1->data!=h)
{
p1=p1->next;
i++;
}
cout<<"在链表的第"<<i<<"个节点"<<endl;
return i;
}

void Sort() //对链表的值从小到大排序
{
PNODE p1,p2,p3;
int i,j,k,m;
m=Sumnode();

Travel();
for(i=0;i<m-1;i++)
{
p1=Head;
for(j=0;j<m-1-i;j++)
{
p2=p1->next;
if((p1->data)>(p2->data))
{
k=p1->data;
p1->data=p2->data;
p2->data=k;
}
p1=p1->next;
}
}
cout<<"排序结果为:"<<endl;
p3=this->Head;
while(p3!=NULL)
{
cout<<p3->data<<" ";
p3=p3->next;
}
}
};

int main() //测试主函数
{
MyList list;
char r;
cout<<"请选择您要的操作:"<<endl;
cout<<endl;
cout<<" "<<"(1)、创建一个链表"<<endl;
cout<<" "<<"(2)、向链表中追加元素"<<endl;
cout<<" "<<"(3)、遍历这个链表"<<endl;
cout<<" "<<"(4)、求这个链表中节点的个数"<<endl;
cout<<" "<<"(5)、向这个链表中插入一个元素"<<endl;
cout<<" "<<"(6)、删除这个链表中的一个元素"<<endl;
cout<<" "<<"(7)、查找一个数据在这个链表中的位置"<<endl;
cout<<" "<<"(8)、对这个链表中的数据从小到大排序"<<endl;
cout<<" "<<"(9)、结束操作"<<endl;
int p;
cin>>p;
if(p==9)
{
cout<<"结束操作"<<endl;
}
while(p!=9)
{
switch(p)
{
case 1:list.init();

break;
case 2:int d;
cout<<"请输入追加的元素"<<endl;
cin>>d;
list.Add(d);

break;
case 3:list.Travel();

break;
case 4:int q;
q=list.Sumnode();
cout<<q<<endl;

break;
case 5:int e,f;
cout<<"请输入所要插入的数据和插入的位置"<<endl;
cin>>e;
cin>>f;
list.Insert(e,f);

break;
case 6:int g;
cout<<"请输入所要删除的节点的位置"<<endl;
cin>>g;
list.Delete(g);

break;
case 7:int h;
cout<<"请输入所要查找的数据"<<endl;
cin>>h;
list.Find(h);

break;
case 8:list.Sort();

break;
}

cout<<"继续操作吗?(y/n)"<<endl;
cin>>r;
if(r=='y')
{
cout<<"请输入您要操作的代号"<<endl;
cin>>p;
}
if(r=='n')
{
cout<<"结束操作"<<endl;
break;
}

}
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-01-20
因为喝了一半后连桶还剩8千克,所以一半水重:15-8=7(千克)全部水重:7*2=14(千克)那么桶就重:15-14=1(千克)
第2个回答  2011-10-04
3.二叉树的链式存储结构的数据结构定义、创建、先序和后序遍历,并将结果序列输出。