新手求助C语言链表操作

Kaciry 2017-09-29 10:06:24
Description


已知线性表中元素为整数,且按照升序排列。编写算法实现在线性表中查找值为x的元素,如果查找成功,返回1;否则,返回0,并且把x插入到正确的位置,使线性表仍按升序排列。

依次输出调用查找插入算法后的线性表中的元素。

提示:存储结构采用代表头结点的循环单链表,结点结构如下:




typedef struct Node

{

int data;

struct Node *next;

}LNode,*LinkList;


要求:

(1)编写函数建立循环单链表CreateLinkList(int n),函数返回值类型为LinkList。

LinkList CreateLinkList(int n)

{

/*按照升序输入n个整数,建立带表头结点的循环单链表*/


}

(2) 编写查找函数QueryLinkList(LinkList *L,int x)实现查找并插入功能,函数返回值类型int。

int QueryLinkList(LinkList *L,int x)

{

/*查找值为x的元素,若查找成功返回1,否则返回0,并把x插入到相应的位置。*/


}

(3)编写函数Display(LinkList L),输出线性表中的元素。

(4)main函数调用QueryLinkList()函数,输出查找结果,然后调用Display函数依次输出线性表中的元素。





Input



输入元素个数n

依次输入n个升序排列的整数

输入带查找的元素值x


Output


输出查找结果1或者0

依次输出线性表中的元素值


Sample Input
sample 1:
6
2 5 8 10 12 16
10

sample2:

6
2 5 8 10 12 16
9


Sample Output
sample 1:
1
2 5 8 10 12 16

sample2:
0
2 5 8 9 10 12 16
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-09-30
  • 打赏
  • 举报
回复
int QueryLinkList(LinkList *L,int x)
{
    if (!L || !(*L))
        return 0;

    LinkList p = *L;

    if (p->data == x)    /*check header */
        return 1;
    else
        p = p->next;

    while (p && p->data < x && p != *L)
        p = p->next;

    if (p->data == x)
        return 1;
    return 0;
}
循环单单链表的查找,个人建议为了模块化,查找只做查找,插入操作领定义函数
老马何以识途 2017-09-30
  • 打赏
  • 举报
回复
链表不适合折半查找,所以从头开始查吧,我只给你关键的伪代码,表达意思,真正的程序你要自己补全:

while (p->data < x)
{
	pre = p;
	p = p->next;
	if (p == L)
		break;
}

if (p->data == x)
	return 1;

n = new LinkList;
pre->next = n;
n->next = p;
n->data = x;

return 0;
赵4老师 2017-09-30
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
自信男孩 2017-09-30
  • 打赏
  • 举报
回复
建议自己还要尝试写写,调试一下;这样对链表操作才能了解更多,以后才能独自写出符合特定需求的链表;
自信男孩 2017-09-30
  • 打赏
  • 举报
回复

/*不带哨兵的*/
int QueryLinkList(LinkList *L,int x)
{
    if (!L || !(*L))
        return 0;

    LinkList p = *L;

    while (p) {
        if (p->data == x)
            return 1;
        p = p->next;
    }

    return 0;
}

/*带哨兵的*/
int QueryLinkList(LinkList *L,int x)
{
    if (!L || !(*L))
        return 0;

    LinkList p = *L->next;

    while (p) {
        if (p->data == x)
            return 1;
        p = p->next;
    }

    return 0;
}

Kaciry 2017-09-29
  • 打赏
  • 举报
回复
int QueryLinkList(LinkList *L,int x) 求写这个函数

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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