加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

《数据结构》链表程序调试示例--有一定代表性请看看

发布时间:2020-12-15 06:04:55 所属栏目:安全 来源:网络整理
导读:下面的一个同学程序,编译和链接均没问题,只是运行出面错误。现将程序示众, 大家细看我改过的地方面,用红色标记。 还是一个粗心,请细分每个功能函块,要画图来推推。要说明的是,我没有从功能上完善同学的程序。程序有好多改进的地方。 同学程序链接是:

下面的一个同学程序,编译和链接均没问题,只是运行出面错误。现将程序示众,大家细看我改过的地方面,用红色标记。

还是一个粗心,请细分每个功能函块,要画图来推推。要说明的是,我没有从功能上完善同学的程序。程序有好多改进的地方。

同学程序链接是:http://blog.csdn.net/u014577636/article/details/40653223

#include<iostream>

using namespace std;

const int Max=70;
template<class TT>
struct Node
{ TT score;
Node<TT> *next;
};

template<class TT>
class Score
{ Node<TT> *first;
public:
Score(); //建立一个空的单链表
Score(TT a[],int n); //建立一个有N个元素的单链表(析构函数省略)
//~Score();
void insert(int i,TT x); //插入函数
int locate( TT x); //按分数查找
TT get(int i); //按学号查找
TT Delete(int i); //删除函数
};

template<class TT>
Score<TT>::Score()
{ first=new Node<TT>;
first->next= NULL;
}

template<class TT>
Score<TT>::Score(TT a[],int n)
{ int i;
Node<TT> *s;
first=new Node<TT>;
first->next=NULL;
for(i=0;i<n;i++){
s=new Node<TT>;
s->score=a[i];
s->next=first->next;
first->next=s;
}
}

/*
template<class TT>
Score<TT>::Score(TT a[],int n) //这个是尾插法
{ Node<TT> *s,*r;
first=new Node;
r=first;
for(i=0;i<n;i++)
{ s=new Node;
s->score=a[i];
r->next=s;
r=s;
}
r-next=NULL;
}
*/


template<class TT>
void Score<TT>::insert(int i,TT x)
{ Node<TT> *p,*s=NULL;
p=first; //从头结点开始
int count=0;
for (count=0;p!=NULL && count<i-1;count++) //查找第i-1个节点
p=p->next;
if(p==NULL)throw "位置"; //没找到
else{ //找到了,插入新节点
s=new Node<TT>;
s->score=x;
s->next=p->next;
p->next=s;
}
}

template<class TT>
int Score<TT>::locate(TT x)
{
Node<TT> *p;
p=first->next;
int count;
for(count=1;p!=NULL;count++)
{ //加一个括号
if(p->score==x)

return count; //返回第i+1位同学
p=p->next; //加了这个语句
} //加一个括号
return 0;//找不到,退出循环
}

template<class TT> //i的用处是什么,函数中没作到。
TT Score<TT>::get(int i)
{
Node<TT> *p;
p=first->next;
int count;
for(count=1;p!=NULL;count++)
{ //加一个括号
p=p->next;
if(p==NULL)throw "位置";
else return p->score; //找到了,返回这位同学
} //加一个括号
}

template<class TT>
TT Score<TT>::Delete(int i)
{ Node<TT> *p,*q;
TT x;
p=first;
int count=0;
for(count=0;p!=NULL && count<i-1;count++)
p=p->next;
if(p==NULL||p->next==NULL) //节点p不存在,或者p的后继节点不存在
throw "位置";
else{
q=p->next;x=q->score;
p->next=q->next;
delete q;
return x;
}
}

int main() //主程序设计不是佷好,一定在不同处理后要输出来看看。
{ int a[Max]={0,2};
Score<int> s(a,4);
s.insert(1,98);
cout<<s.get(1);
s.locate(98);
s.Delete(1);
return 0;
}

祝大家下次调试成功!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读