这道C语言编程题怎么做啊
展开全部
Description
已知线性表中元素为整数,且按照升序排列。
编写算法实现在线性表中查找值为x的元素,如果查找成功,返回1;
否则,返回2,并且把x插入到正确的位置,使线性表仍按升序排列。
依次输出调用查找插入算法后的线性表中的元素。
提示:存储结构采用代表头结点的循环单链表,结点结构如下:
typedef struct Node
{ int data;
struct Node *next;
}LNode,*LinkList;
要求:(1)编写函数建立循环单链表CreateLinkList(int n),函数返回值类型为LinkList。
LinkList CreateLinkList(int n)
{
LNode *head;
int i=0;
LNode *p,*q;
head=malloc(sizeof(LNode));
head->next=head;
q=head;
while(i<n)
{
scanf("%d",&a);
p=malloc(sizeof(LNode));
p->data=a;
p->next=q->next;
q>next=p;
q=p;
i++;
}
return head;
/*按照升序输入n个整数,建立带表头结点的循环单链表*/}
(2) 编写查找函数QueryLinkList(LinkList *L,int x)实现查找并插入功能,函数返回值类型int。
int QueryLinkList(LinkList L,int x)
{ /*查找值为x的元素,若查找成功返回1,否则返回0,并把x插入到相应的位置。*/
int found=1;
LinkList p,q;
p=L->next;
while(p!=L && p->data!=x) p=p->next;
if(p==L)
{
found=0;
q=malloc(sizeof(LNode));
q->data=x;
p=L->next;
while(p->data<x && ((p->next)->data<x || p->next!=L)) p=p->next;
q->next=p->next;
p->next=q;
}
return found;
}
(3)编写函数Display(LinkList L),输出线性表中的元素。
void Display(LinkList L)
{
LinkList p=L->next;
while(p!=L)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
(4)main函数调用QueryLinkList()函数,输出查找结果,然后调用Display函数依次输出线性表中的元素。Input输入元素个数n依次输入n个升序排列的整数输入带查找的元素值x
int main()
{
LinkList L;
int n,x;
scanf("%d",&n);
L=CreateLinkList(n);
scanf("%d",x)
n=QueryLinkList(L,x);
print("%d\t",n);
Display(L);
return 0;
}
Output输出查找结果1或者0依次输出线性表中的元素值
Sample Input
sample 1: 6 2 5 8 10 12 1610
sample 2: 6 2 5 8 10 12 16 9
Sample Output
sample 1: 1 2 5 8 10 12 16
sample 2: 0 2 5 8 9 10 12 16
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询