动态查找问题

syn_lover 2008-10-24 09:50:23
求助!碰到好几个问题,解决的方法应该是同一思路。其中一个问题如下:
一个文本文件中每行存储一个学号,求不重复的学号个数。
问题主要在于如何将不重复的学号输出(或统计个数),不知道到底有多少个不重复的 ,有没有什么好的、高效的算法来实现。
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
机智的呆呆 2008-10-26
  • 打赏
  • 举报
回复
c++ primer好像有这么一个例子把,用set的~~~记不清了
liubuweiright 2008-10-26
  • 打赏
  • 举报
回复
问题主要在于如何将不重复的学号输出(或统计个数),不知道到底有多少个不重复的 ,有没有什么好的、高效的算法来实现。

排序(高效的算法)
输出(中间有一个变量来比较不重复的)
chlaws 2008-10-24
  • 打赏
  • 举报
回复
要用stl 那就用个map比较好,first存行号,seconde存记录


#include <stdio.h>
#include <stdlib.h>

typedef struct _TNode{
int val;
int count;
struct _TNode* next;
}TNode;

TNode* get_result(int (*a)[2],int row)
{
TNode *link = NULL;
TNode *plink = link;
TNode *prevlink = link;
int i=0;
int j=1;
int tag=0;
int first = 1;
while(i<row)
{
j=1;
while(j<2)
{
link = plink;
while(link!=NULL)
{
if (a[i][j] == link->val)
{
link->count += 1;
tag = 1;
break;
}
tag = 0;
prevlink = link;
link = link->next;
}
if(tag == 0)
{
TNode* pnode = (struct _TNode*)malloc(sizeof(struct _TNode));
if(pnode == NULL)
{exit(-1);}
pnode->val=a[i][j];
pnode->count=1;
pnode->next = NULL;
if(first++ == 1)
{
link = pnode;
plink = link;
}
else
{
link = plink;
prevlink->next=pnode;
}

}
j++;
}/*cols..*/

i++;
}/*rows...*/
return plink;

}
void display(TNode* link)
{
TNode* plink = link;
while(plink!=NULL)
{
printf("Student NO :%d\tcount :%d\n",plink->val,plink->count);
plink=plink->next;
}

}
void freelink(TNode*link)
{
TNode* pt= link;
while(link!=NULL)
{
pt = link;
link = link->next;
free(pt);
}

}
int main()
{
int arr[10][2]={ \
1,10001,\
2,10002,\
3,10003,\
4,10005,\
5,10002,\
6,10007,\
7,10003,\
8,10009,\
9,10002,\
10,10005\
};
int i=0,j;
for(;i<10;i++)
{
for(j=0;j<2;j++)
{
printf("%-2d,",arr[i][j]);
}
printf("\n");
}

TNode* link = get_result(arr,10);
display(link);
freelink(link);

return 0;
}
/*
1 ,10001,
2 ,10002,
3 ,10003,
4 ,10005,
5 ,10002,
6 ,10007,
7 ,10003,
8 ,10009,
9 ,10002,
10,10005,
Student NO :10001 count :1
Student NO :10002 count :3
Student NO :10003 count :2
Student NO :10005 count :2
Student NO :10007 count :1
Student NO :10009 count :1
Press any key to continue

*/

刘小西Beta 2008-10-24
  • 打赏
  • 举报
回复
可以使用STL中的set,插入元素的时候使用insert_unique,就能保证插入的不是重复的,最后不论是统计(count()),还是输出,都很方便。set内部是RB-tree,插入和查找复杂度都是O(lgN),肯定比你写的二叉搜索树效率高。
glacier3d 2008-10-24
  • 打赏
  • 举报
回复
读取学号,建成二叉树,并匹配
wuyu637 2008-10-24
  • 打赏
  • 举报
回复
hash表

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧