回 帖 发 新 帖 刷新版面

主题:求救;一个关于顺序表的完整解析过程.哪个热心人帮帮小弟

题目是:顺序表的算法实现 

要求: 

(1) 从键盘上输入12个按递减顺序排列的整数构造成顺序表L,写一程序实现将x(其直从键盘输入)插入L中,并使L保持有序性.最后输出顺序表L的元素值 

(2)从键盘上输入一个整数x.在顺序表L中查找x的位置.若找到.则显示x在L中的下标否则显示"该数不存在" 


我不知道怎么把他们组成一个完整的程序.哪个热心人帮帮小弟

比如顺序表的初始化


 seqlist *init_seqlist()
   {seqlist *L;
     L=malloc(sizeof(seqlist));
     L->last=-1;retrun L;
    }

调用主函数
  main()
 {
   seqlist *L;
   L=init_seqlist();


插入运算(算法如下)

int insert_seqlist(seqlist *L,int i,datatype x)
{
  int j;
  if(L->last==MAXSIZE-1)
     {printf("table full");retrun(-1)}
  if(i<1 11 i<L->last+2)
      {printf ("warng");return(0)}
  for(j=L->last;j>i-1;j--)
      L->data[j+1]=L->data[j];
  L->data[i-1]=x;
  L->data++;
  return(1);
}


其中的按直查找


最好是写的详细点.....我先谢过了

回复列表 (共2个回复)

沙发

其实要是没有要求的话,你可以直接用一个数组来处理顺序表

板凳

#include <stdio.h>
#define null 0
struct sqlist
{
   int data;
   struct sqlist *next;
};

struct sqlist *creat()
{
    struct sqlist *head,*p1,*p2;
    int i=0;
    printf("\nInput the data for sqlist:\n");
    p1=p2=(struct sqlist *) malloc (sizeof(struct sqlist));
    scanf("%d",&p1->data);
    head=null;
    while(p1->data!=null)
     {
        i=i+1;
        if(i==1) head=p1;
        else
          {
             p2->next=p1;
             p2=p1;
             p1=(struct sqlist *) malloc (sizeof(struct sqlist));
             scanf("%d",&p1->data);
          }
     }
     p2->next=null;
     return(head);
}

display(struct sqlist *p)
{
    struct sqlist *q;
    q=p;
    while(q!=null)
      {
        printf("%d",q->data);
        q=q->next;
      }
}


insert(struct sqlist *p,int x)
{
  struct sqlist *t,*t1,*t2;
  t=p;
  t1=(struct sqlist *) malloc (sizeof(struct sqlist));
  t1->data=x;
  while(t->next!=null)
    {
        if(t1->data>t->data)
          {
            t1->next=t;
            return(t1);
          }
        else if(t1->data<t->data && t1->data>t->next->data)
           {
              t1->next=t->next;
              t->next=t1;
              return(p);
           }
        else
             t2=t;
             t=t->next;
     }
  if(t->next==null)
   {
     if(t1->data<t->data)
      {
        t->next=t1;
        t1->next=null;
      }
      else {
             t2->next=t1;
             t1->next=t;
            }
   return(p);
   }
             

}

locate(struct sqlist *p,int y)
{
    struct sqlist *l;
    int count=0;
    l=p;
    while(l->next!=null)
     {
        count=count+1;
        if(l->data==y)
         {
           printf("%d the locate is %d\n",y,count);
           break;
         }
        else l=l->next;
     }
    if(l->next==null && l->data==y)
      {
        printf("%d the locate is%d\n",y,count);
      }
    else printf("Can't find y=%d",y);
}

main()
{
    struct sqlist *p,*n;
    int x,y;
    p=creat();
    display(p);
    printf("\nPlease input the x=");//输入要插入的数
    scanf("%d",&x);
    n=insert(p,x);
    display(n);
    printf("\nPlease input the data,you want to locate y=");//输入要查找的数
    scanf("%d",&y);
    locate(p,y);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册