分享
 
 
 

用c++语言实现基本的数据结构(1)

王朝c/c++·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

以下是用c++实现的链表的数据结构。

笔者还做了栈,队列,循环队列,串等数据结构,如有需要者请

E-mail:cangzhu@163.com

#include"iostream.h"

#include"stdio.h"

#include"stdlib.h"

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOAT -2

#define MAXSIZE 100

typedef int status;

typedef int ElemType;

typedef strUCt LNode{

ElemType data;

struct LNode *next;

} *Link,*Position;

class LinkList

{

private:

Link head;

int len;

public:

status InitList(LinkList &L);

status DestroyList(LinkList &L);

void FreeNode(Link p);

status ClearList(LinkList &L);

status InsFirst(LinkList &L,Link s);

status Remove(LinkList &L,Link p);

status InsBefore(LinkList &L,Link p,Link s);

status InsAfter(LinkList &L,Link p,Link s);

status SetCurElem(Link p,ElemType &e);

ElemType GetElem(Link p);

int ListLength(LinkList L);

Position GetHead(LinkList L);

Position GetLast(LinkList L);

status PriorPos(LinkList L,Link p,Position &q);

status NextPos(LinkList L,Link p,Position &q);

status Search(LinkList L,ElemType e,Position &p);

};

status LinkList::InitList(LinkList &L)

{

Link L1;

L1=(LNode *)malloc (sizeof(LinkList)*MAXSIZE);

L.head=L1;

L.head->next=NULL;

L.len=0;

if(L1==NULL)

return OVERFLOAT;

else

return OK;

}

status LinkList::DestroyList(LinkList &L)

{

return OK;

}

void LinkList::FreeNode(Link p)

status LinkList::ClearList(LinkList &L)

{

L.head->next=NULL;

len=0;

return OK;

}

status LinkList::InsFirst(LinkList &L, Link s)

{

s->next=L.head->next;

L.head->next=s;

len++;

return OK;

}

status LinkList::Remove(LinkList &L,Link p)

{

Link q=L.GetHead(L);

while(q->next!=p)

q=q->next;

q->next=q->next->next;

L.len--;

return OK;

}

status LinkList::InsBefore(LinkList &L,Link p,Link s)

{

Link q=L.head;

while(q->next!=p)

q=q->next;

s->next=q->next;

q->next=s;

len++;

return OK;

}

status LinkList::InsAfter(LinkList &L,Link p,Link s)

{

s->next=p->next;

p->next=s;

len++;

return OK;

}

status LinkList::SetCurElem(Link p,ElemType &e)

{

p->data=e;

return OK;

}

ElemType LinkList::GetElem(Link p)

{

return p->data;

}

int LinkList::ListLength(LinkList L)

{

return L.len;

}

Position LinkList::GetHead(LinkList L)

{

return L.head;

}

Position LinkList::GetLast(LinkList L)

{

Link q=head;

while(q->next!=NULL)

q=q->next;

return q;

}

status LinkList::PriorPos(LinkList L,Link p,Position &q)

{

Link QQ=L.GetHead(L);

if(p==qqp==qq->next)

return FALSE;

while(qq->next!=p)

qq=qq->next;

q=qq;

return OK;

}

status LinkList::NextPos(LinkList L,Link p,Position &q)

{

if(p->next==NULL)

return FALSE;

q=p->next;

return OK;

}

status LinkList::Search(LinkList L,ElemType e,Position &p)

{

Link q=L.GetHead(L);

int i=0;

do

{

i++;

q=q->next;

if(i>L.len)

return FALSE;

}

while(q->data!=e);

p=q;

return OK;

}

//下面是测试程序,读者可以按自己的要求,修改并测试!

void main()

{

/*LinkList LL;

LL.InitList(LL);

LNode node[5];

int i;

for(i=0;i<5;i++)

node[i].next=NULL;

for(i=0;i<5;i++)

node[i].data=10*i;

LNode node2[5];

int j;

for(j=0;j<5;j++)

node2[j].next=NULL;

for(j=0;j<5;j++)

node2[j].data=100+10*j;

for(i=0;i<5;i++)

LL.InsFirst(LL,&node[i]);

for(i=0;i<5;i++)

LL.InsAfter(LL,&node[i],&node2[i]);

for(i=0;i<5;i++)

cout<<LL.GetElem(&node[i])<<endl;

for(i=0;i<5;i++)

cout<<LL.GetElem(&node2[i])<<endl;

int e=22222;

LL.SetCurElem(&node2[3],e);

cout<<"changed:"<<LL.GetElem(&node2[3])<<endl;

cout<<"先面遍历整个线性表:"<<endl;

for(Link q=LL.GetHead(LL)->next;q!=NULL;q=q->next)

cout<<q->data<<endl;

cout<<"last:"<<LL.GetLast(LL)->data<<endl;

cout<<node[4].data<<"的前一个元素:"<<endl;

if(LL.PriorPos(LL,&node[4],q))

cout<<q->data<<endl;

else

cout<<node[4].data<<"是最前一个元素"<<endl;

cout<<node2[4].data<<"的前一个元素:"<<endl;

LL.PriorPos(LL,&node2[4],q);

cout<<q->data<<endl;

cout<<node2[3].data<<"的下一个元素:"<<endl;

LL.NextPos(LL,&node2[3],q);

cout<<q->data<<endl;

cout<<"remove :"<<node[3].data<<endl;

LL.Remove(LL,&node[3]);

cout<<"先面遍历整个线性表:"<<endl;

for(i=0,q=LL.GetHead(LL)->next;i<LL.ListLength(LL);i++)

cout<<"last:"<<LL.GetLast(LL)->data<<endl;

q=LL.GetLast(LL);

Link qq;

if(LL.NextPos(LL,q,qq))

cout<<qq->data<<endl;

else

cout<<q->data<<"是最后一个元素!"<<endl;

cout<<"先面遍历整个线性表:"<<endl;

for(q=LL.GetHead(LL)->next;q!=NULL;q=q->next)

cout<<q->data<<endl;

cout<<"remove :"<<node[3].data<<endl;

Link temp;

if(LL.Search(LL,120,q))

cout<<LL.Search(LL,22222,temp)<<endl;

LL.ClearList(LL);

LNode test;

test.data=10;

LL.InsFirst(LL,&test);

cout<<"先面遍历整个线性表:"<<endl;

for(q=LL.GetHead(LL)->next;q!=NULL;q=q->next)

cout<<q->data<<endl;

if(LL.Search(LL,10,temp))

cout<<temp->data;

LNode no[10];

for(i=0;i<10;i++)

no[i].next=NULL;

for(i=0;i<10;i++)

no[i].data=100*i;

LL.InsFirst(LL,&no[9]);

for(i=8;i>=0;i--)

LL.InsBefore(LL,&no[i+1],&no[i]);

cout<<"测试——先面遍历整个线性表:"<<endl;

for(q=LL.GetHead(LL);q->next!=NULL;q=q->next)

cout<<q->next->data<<endl;*/

int i;

LinkList stu;

stu.InitList(stu);

LNode stu_node[6];

for(i=0;i<6;i++)

stu_node[i].data=i*6;

for(i=0;i<6;i++)

stu.InsFirst(stu,&stu_node[i]);

cout<<stu.GetHead(stu)->next->data<<endl;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有