回 帖 发 新 帖 刷新版面

主题:[原创]求实现顺序表的初始化、插入、删除操作

1、用书22页的结构表示顺序表,(1)实现顺序表的初始化、插入、删除操作;(2)使用插入操作构建两顺序表(其元素按值非递减排列),要求归并这两顺序表,得到新的一顺序表,新顺序表的值也按非递减排列。 最好都做完耶 用数据结构解答 本人菜鸟不懂耶 有高手用意做下吗 感觉

回复列表 (共1个回复)

沙发

#include<iostream>
using namespace std;

typedef struct LNode
{
    int data;
    struct LNode  *next;
}LNode, *LinkList;

int GetElem_L(LinkList L,int i,int &e)
{
    LinkList p=L->next;int j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i)
        return -1;
    e=p->data;
    return 1;
}

//逆序输入n个元素的值,建立代表头结点的单链表L
void CreateList_L(LinkList &L,int n)
{
    LinkList p;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
//    q=L;
    for(int i=n;i>0;--i)
    {
        p=(LinkList)malloc(sizeof(LNode));
        cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}

//求表长的操作
int ListLength(LinkList L)
{
    LinkList p;
    int k;
    k=0;
    p=L->next;
    while(p)
    {
        k++;
        p=L-1; 
        p=p->next;
    }
    cout<<k;    
    return k;
}

//在线性表L中的第i个元素之前插入一个e
int ListInsert_L(LinkList &L,int i,int e)
{
    LinkList p;
    p=L;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;++j;//寻找第i-1个结点
    }
    if(!p||j>i-1)return -1;
    LinkList s=(LinkList)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return 1;
}

//在线性表的第i个元素之前删除一个e
int ListDelete_L(LinkList &L,int i,int &e)
{
    LinkList p,q;
    int j;
    p=L;
    j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;++j;
    }
    if(!(p->next)||j>i-1)
        return -1;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return 1;
}


//修改
int ChangeList_L(LinkList &L,int i,int a)
{
  LinkList p=L;
  int j=0;//int n;
  //int e;
  cout<<"请输入要修改的是第几个数(i)"<<endl;
  cin>>i; 
  cout<<"请将第i个数修改为a"<<endl
      <<"请输入a的值:"<<endl;
  cin>>a;
  //p=p->next ;
  while(p&&j<i)
  { j++; 
     p=p->next ;
     
  }
  if(!p||j>i)
  return -1; 
 p->data=a;
  cout<<"显示该链表如下:"<<endl;
   return 1;
}

//主函数
void main()
{
        int e,s,m,n,t;
        LinkList L;
          CreateList_L(L,t);
        cout<<"请输入要输入数据的个数:"<<endl;
        cin>>n; 
        cout<<"请输入要输入的数据:"<<endl;

        for(int i=1;i<=n;i++)
        {
            cin>>m;
            ListInsert_L(L,i,m);
        }//依次插入元素到表尾
        cout<<"您输入的数据如下:"<<endl;
        for(i=1;i<=n;i++)
        {            
           GetElem_L(L,i,e);
           cout<<e<<endl;
        }   //依次显示元素
        ChangeList_L(L,i,e);
        for(i=1;i<=n;i++)
     {
        GetElem_L(L,i,e);
        cout<<e<<endl;
     }
        
        cout<<"请输入您要删除元素(或序号):"<<endl;
        cin>>s;
        cout<<"删除后结果显示如下:"<<endl;
        ListDelete_L(L,s,e);   
        for(i=1;i<n;i++)
        {
            GetElem_L(L,i,e);
            cout<<e<<endl;
        }
        cout<<"输出后数据长度为:"<<i-1<<endl;
//     ListLength(L);
}

我来回复

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