小弟恳请诸位大哥大姐帮帮忙,感激不尽
时间:2008-06-10 08:36:28
来源:论坛整理 作者: 编辑:chinaitzhe
网友回复:一条接一条
每个结构中都有一个指针指象下一条数据
网友回复:copy一个贴的 你看看
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ #include<iostream> using namespace std; struct Node { int value; Node* next; }; void creatlist(Node **head)// { (*head)=new Node; (*head)->next=NULL; int i; cout<<"请输入数字"; for(int n=0;n<3;n ) { cin>>i; Node* p=new Node; p->value=i; p->next=(*head)->next; (*head)->next=p; } } int print(Node *head) { Node *p=head; p=p->next; while(p) { cout<<p->value<<endl; p=p->next; } return 0; }/* void del(Node **head) { cout<<"删除一个元素"; Node* q=*head; Node* p=*head; int i; cin>>i; if(p->value == i) { *head = p->next; delete p; } else{ while(p && p->value != i){ q = p; p = p->next; } if(p && p->value == i){ q->next = p->next; delete p; } } }*/ void del(Node **head) { cout<<"删除一个元素"; Node* q=*head; Node* p=*head; int i; cin>>i; /*if(p->value == i){ (*head)->next= p->next; delete p; }*/ while(p&&p->value!=i) { q=p; p=p->next; } if(p==NULL)cout<<"notfind\n"; else {q->next=p->next; delete p;} } /* insert() { Node* s=new Node; s->next=head->next; head->next=s; }*/ int main() { Node *head; creatlist(&head); print(head); del(&head); print(head); return 0; } /*
网友回复: 拿链表和数组比吧
数组一般是固定大小的,一般不能动态改变大小。链表可以随时添加和删除元素,理论上是无限空间。但是链表需要额外的空间存储指针。
主要是这些吧。代码楼上给了
网友回复:2楼还真敢贴
lz,网上那么多,你自己搜搜不敢?
网友回复:baidu lz
网友回复:骑雕飘过...
网友回复:引用一下某位师兄的话:so懒!!
网友回复:链表在编程的应用当中是干什么的,在什么情况下用到链表?
网友回复:去网上搜阿...
http://oa.nationsms.com/oa/bbs/printpage.asp?BoardID=2&ID=31
本文主要讲述数据结构在游戏中的应用,其中包括对链表、顺序表、栈、队列、二叉树及图的介绍。读者在阅读本文以前,应对数据结构有所了解,并且熟悉C/C 语言的各种功用。好了,现在我们由链表开始吧!
1、链表
在这一节中,我们将通过一个类似雷电的飞机射击游戏来讲解链表在游戏中的应用。在飞机游戏中,链表主要应用在发弹模块上。首先,飞机的子弹是要频繁的出现,消除,其个数也是难以预料的。链表主要的优点就是可以方便的进行插入,删除操作。我们便将链表这一数据结构引入其中。首先,分析下面的源代码,在其中我们定义了坐标结构和子弹链表。
struct CPOINT
{
int x; // X轴坐标
int y; // Y轴坐标
};
struct BULLET
{
struct BULLE* next; // 指向下一个子弹
CPOINT bulletpos; // 子弹的坐标
int m_ispeed; // 子弹的速度
};
接下来的代码清单是飞机类中关于子弹的定义:
class CMYPLANE
{
public:
void AddBullet(struct BULLET*); // 加入子弹的函数,每隔一定时间加弹
void RefreshBullet(); // 刷新子弹
privated:
struct BULLET *st_llMyBullet; // 声明飞机的子弹链表
};
在void AddBullet(struct BULLET*)中,我们要做的操作只是将一个结点插入链表中,并且每隔一段时间加入,就会产生连续发弹的效果。
这是加弹函数主要的源代码:
void AddBullet(struct BULLET*)
{
struct BULLET *st_llNew,*st_llTemp; // 定义临时链表
st_llNew=_StrucHead; // 链表头(已初始化)
st_llNew->(BULLET st_llMyBullet *)malloc(sizeof(st_llMyBullet)); // 分配内存
st_llTemp= =_NewBullet; // 临时存值
st_llNew->next=st_llTemp->next; st_llTemp->next=st_llNew;
}
函数Void RefreshBullet()中,我们只要将链表历遍一次就行,将子弹的各种数据更新,其中主要的源代码如下:
while(st_llMyBullet->next!=NULL)
{
// 查找
st_llMyBullet->bulletpos.x-=m_ispeed; // 更新子弹数据
………
st_llMyBullet=st_llMyBullet->next; // 查找运算
}
经过上面的分析,在游戏中,链表主要应用在有大规模删除,添加的应用上。不过,它也有相应的缺点,就是查询是顺序查找,比较耗费时间,并且存储密度较小,对空间的需求较大。
假如通过对游戏数据的一些控制,限定大规模的添加,也就是确定了内存需求的上限,可以应用顺序表来代替链表,在某些情况下,顺序表可以弥补链表时间性能上的损失。当然,应用链表,顺序表还是主要依靠当时的具体情况。那么,现在,进入我们的下一节,游戏中应用最广的数据结构 — 顺序表。
关键字:小弟,恳请,大哥,大姐,帮帮忙,
上一篇:三个尖括号表示什么啊?
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面