码迷,mamicode.com
首页 > 其他好文 > 详细

线性表总结

时间:2019-03-25 23:11:22      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:位置   using   delete   stream   pre   ios   maxsize   ret   amp   

1.从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变。

1.1 代码1

#define maxsize 50                                 //1
#include <iostream>                              //2
using namespace std;                          //3
typedef struct{                                     //4
    int data[maxsize];                          //5
    int length;                                      //6
}SqList;                                                 //7
typedef SqList *List;                            //8
void CreateSqList(List &L,int a[],int n); //9
void DispSqList(List L);                        //10
void DestroyList(List &L);                      //11
void DelSameNode(List &L) ;               //12
void DestroyList(List &L){                   //13
    delete L;                                     //14
}                                                        //15
int main()                                         //16
{                                                       //17
    int i,n;                                       //18
    int a[maxsize];                          //19
    List L;                                       //20
    cin>>n;                                     //21
    for(i=0;i<n;i++)                          //22
       cin>>a[i];                                //23
     CreateSqList(L,a,n)  ;             //24
     DelSameNode(L) ;                  //25
     DispSqList(L);                          //26
     DestroyList(L);                         //27
}                                          //28
void CreateSqList(List &L,int a[],int n) //创建顺序表    //29
{                                                      //30
  L=new SqList;                            //31
  int i,m;                                       //32
  for(i=0;i<n;i++)                                                         //33
  {                                                                              //34
    L->data[i]=a[i];                                                      //35
  }                                                                             //36
  L->length=n;                                                         //37
}                                                                             //38
void DispSqList(List L)//输出顺序表                      //39
{                                                                             //40
  int i,flag=0;                                                          //41
  for(i=0;i<L->length;i++)                                       //42
  {                                                                         //43
    if(flag)cout<<" ";                                             //44
    cout<<L->data[i];                                         //45
    flag=1;                                                         //46
  }                                                                   //47
}                                                                   //48
void DelSameNode(List &L)//删除顺序表重复元素 //49
{                                                                    //50
  int i,k,j=0;                                                  //51
  int flag=0;                                                 //52
  for(i=1;i<L->length;i++)                            //53
  {                                                               //54
    k=0;                                                     //55
    while(k<=j&&L->data[i]!=L->data[k])  //56
    k++;                                                   //57
    if(k>j)                                                //58
    {                                                        //59
      j++;                                                //60
      L->data[j]=L->data[i];                    //61
    }                                                     //62
    flag=1;                                          //63
  }                                                     //64
  if(flag)L->length=j+1;                    //65
}                                                      //66

1.2 不懂得地方

53行到64行 算法思路有点混乱,思路不是特别清晰
分析:第i个i元素与前面j已确定无重复得j个元素进行比较,相同则不是算入无重复序列

2.一个带有表头节点的单链表,查找链表中倒数第m个位置上的节点。

2.1代码2

int Find(LinkList L, int m )                                 //1
{                                                                       //2
  LinkList p;                                                      //3  
  int i=0;                                                           //4
  for(p=L->next;p;p=p->next)                          //5
   i++;                                                             //6   
  int n=i;                                                        //7
  if(m>n||m<=0)                                            //8
  return -1;                                                    //9
  for(i=0,p=L->next;p;p=p->next,i++)           //10
  if(i+m==n)                                                  //11
  {                                                               //12    
    return p->data;                                      //13
  }                                                              //14
}                                                                 //15

2.2 不懂的地方

1行到15行:换成数组查找倒K项,在数组足够大的情况下,为何会超时呢
分析:先遍历链表,得出链表长度,再次遍历链表查找倒K项
*下图为数组超时代码
技术图片

线性表总结

标签:位置   using   delete   stream   pre   ios   maxsize   ret   amp   

原文地址:https://www.cnblogs.com/tingfengji/p/10597346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!