这道C语言编程题怎么做啊

 我来答
扈怀炜4h
2016-07-07 · TA获得超过6038个赞
知道大有可为答主
回答量:6907
采纳率:67%
帮助的人:1301万
展开全部
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式