社区
数据结构与算法
帖子详情
线性表的问题
wadeok
2009-12-22 10:51:54
如何使用线性表 实现查找功能?
...全文
121
5
打赏
收藏
线性表的问题
如何使用线性表 实现查找功能?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
浮云V流水
2009-12-24
打赏
举报
回复
我这里有一个刚写的,你可以参考参考
#include <stdio.h>
#include <stdlib.h>
struct llist
{
int num;
struct llist *next;
};
typedef struct llist node;//定义新类型
typedef node *llink;//定义新类型指针
/*--------------------*/
llink findnode(llink head,int num)
{
llink ptr;
ptr=head;//指向链表开始
while(ptr!=NULL)//遍历链表
{
if (ptr->num==num)//查找编号
return ptr;
ptr=ptr->next;//指向下一结点
}
return ptr;
}
Chatopera 研发团队
2009-12-23
打赏
举报
回复
你可以在无序的线性表中先排序再查找。
/**
* 冒泡排序----交换排序的一种
* 方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。
* 性能:比较次数O(n^2),n^2/2;交换次数O(n^2),n^2/4
*
* @param data
* 要排序的数组
* @param sortType
* 排序类型
* @return
*/
public void bubbleSort(int[] data, String sortType) {
if (sortType.equals("asc")) { // 正排序,从小排到大
// 比较的轮数
for (int i = 1; i < data.length; i++) { // 数组有多长,轮数就有多长
// 将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i; j++) {// 每一轮下来会将比较的次数减少
if (data[j] > data[j + 1]) {
// 交换相邻两个数
swap(data, j, j + 1);
}
}
}
} else if (sortType.equals("desc")) { // 倒排序,从大排到小
// 比较的轮数
for (int i = 1; i < data.length; i++) {
// 将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i; j++) {
if (data[j] < data[j + 1]) {
// 交换相邻两个数
swap(data, j, j + 1);
}
}
}
} else {
System.out.println("您输入的排序类型错误!");
}
printArray(data);// 输出冒泡排序后的数组值
}
Chatopera 研发团队
2009-12-23
打赏
举报
回复
/**
* 二分查找特定整数在整型数组中的位置(非递归) 查找线性表必须是有序列表
*
* @paramdataset
* @paramdata
* @returnindex
*/
public int binarySearch(int[] dataset, int data) {
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if (data < dataset[beginIndex] || data > dataset[endIndex]
|| beginIndex > endIndex)
return -1;
while (beginIndex <= endIndex) {
midIndex = (beginIndex + endIndex) >>> 1; // 相当于midIndex =
// (beginIndex +
// endIndex) / 2,但是效率会高些
if (data < dataset[midIndex]) {
endIndex = midIndex - 1;
} else if (data > dataset[midIndex]) {
beginIndex = midIndex + 1;
} else {
return midIndex;
}
}
return -1;
}
Chatopera 研发团队
2009-12-23
打赏
举报
回复
/**
* 二分查找特定整数在整型数组中的位置(递归) 查找线性表必须是有序列表
*
* @paramdataset
* @paramdata
* @parambeginIndex
* @paramendIndex
* @returnindex
*/
public int binarySearch(int[] dataset, int data, int beginIndex,
int endIndex) {
int midIndex = (beginIndex + endIndex) >>> 1; // 相当于mid = (low + high)
// / 2,但是效率会高些
if (data < dataset[beginIndex] || data > dataset[endIndex]
|| beginIndex > endIndex)
return -1;
if (data < dataset[midIndex]) {
return binarySearch(dataset, data, beginIndex, midIndex - 1);
} else if (data > dataset[midIndex]) {
return binarySearch(dataset, data, midIndex + 1, endIndex);
} else {
return midIndex;
}
}
dskit
2009-12-22
打赏
举报
回复
非排序链表:从前往后一个一个找
排序链表:二分查找
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
线性表
数据结构(
线性表
)源码
数据结构(
线性表
)源码 数据结构(
线性表
)源码 数据结构(
线性表
)源码 数据结构(
线性表
)源码 数据结构(
线性表
)源码
线性表
长度
这个程序创建了
线性表
并且可以用于
线性表
长度的求解,输入
线性表
就求出了求
线性表
长度,
数据结构--
线性表
问题
总结
问题
:在find函数中,for循环中不可以写作int i=0;应该在for循环外部定义再在for循环赋值。而当查找为1时,即第一次if内语句未实现,而else语句实现,就会报错。一种可能,vs2010支持不是c99,无法在for中定义。
学习
线性表
的数据存储结构时所遇到的
问题
线性表
的数据存储结构,指的是用一段地址连续的数据存储单元依次存储
线性表
的数据元素。 2.描述顺序存储结构需要的要点: 存储空间的起始位置;
线性表
的最大存储量;
线性表
的当前长度; 3.插入元素时要进行的...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章