回 帖 发 新 帖 刷新版面

主题:请各位高手帮我完成这个程序!!!(用C或C++)

    建立一个顺序存储的线性表,实现线性表的插入、删除操作;
要求:
(1)建立一个按关键字有序的线性表(顺序存储的和链式存储的); 
(2)从键盘上输入一个数,将该数插入到表中,使该线性表插入数据后仍按关键字有序;
(3)从键盘上输入一个数,查找表中是否存在该数,若有则删除所有与该数相等的数

回复列表 (共2个回复)

沙发

我做了一个差不多的题,你看看自己改改吧!

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;

typedef struct{
    int *elem;
    int length;
    int listsize;
    
}SqList;
/*构造一个空的线性表L*/
void InitList_Sq(SqList &L){//构造一个空的线性表L
    L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem) exit(1);
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
}
/*在顺序线性表L中第I个位置之前插入新的元数e*/
void ListInsert_Sq(SqList &L,int i,ElemType e){
      ElemType   *q,*p;   
          ElemType   *newbase;   
          if(i<1||i>L.length+1)   
                  printf("输入的位数比线性表大了!");   
          if(L.length>=L.listsize)   
          {   
                  newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));   
                  if(!newbase)   exit(1);   
                  L.elem   =   newbase;   
                  L.listsize+=LISTINCREMENT;   
          }   
          q=&(L.elem[i-1]);   
          for(p=&(L.elem[L.length-1]);p>=q;--p)   
                  *(p+1)=*p;             /*插入位置及之后的元素右移*/   
          *q=e;       /*插入e*/   
          ++L.length;       /*表长增加1*/   
         
}
/*在顺序表L中删除第i个元素,并用e 返回其值*/
void ListDelete_Sq(SqList &L,int i,ElemType &e){
    if((i<1)||(i>L.length))
    printf("i不在范围内!");
    ElemType *p,*q;
    p=&(L.elem[i-1]);
    e=*p;
    q=L.elem+L.length-1;
    for(++p;p<=q;++p) *(p-1)=*p;
    --L.length;

}



/*用E返回线性表L中第I个数据元数的值*/
int GetElem_Sq(SqList L,int i,ElemType &e){
    if(i<1||i>L.length) 
    printf("没有这个位数!");
    e = L.elem[i-1];
return 1;    
}

void main(){
    SqList L;
    ElemType e;    
    InitList_Sq(L);
    ListInsert_Sq(L,1,1);
    ListInsert_Sq(L,2,2);
    ListInsert_Sq(L,3,3);
    ListInsert_Sq(L,4,4);
    ListInsert_Sq(L,5,5);
    printf("被插入的数是1,2,3,4,5\n");
    
    GetElem_Sq(L,2,e);
    printf("第二个数是:");
    printf("%d \n", e);
    GetElem_Sq(L,4,e);
    printf("第四个数是:");
    printf("%d \n", e);
    
    ListDelete_Sq(L,1,e);
    printf("被DELETE的数是:");
    printf("%d\n",e);
    //GetElem_Sq(L,1,e);

    
    
}

板凳

void main(){
    SqList L;
    ElemType e;    
    InitList_Sq(L);
    ListInsert_Sq(L,1,1);
    ListInsert_Sq(L,2,2);
    ListInsert_Sq(L,3,3);
    ListInsert_Sq(L,4,4);
    ListInsert_Sq(L,5,5);
    printf("被插入的数是1,2,3,4,5\n");
    
    GetElem_Sq(L,2,e);
    printf("第二个数是:");
    printf("%d \n", e);
    GetElem_Sq(L,4,e);
    printf("第四个数是:");
    printf("%d \n", e);
    
    ListDelete_Sq(L,1,e);
    printf("被DELETE的数是:");
    printf("%d\n",e);
    //GetElem_Sq(L,1,e);
这一部分改改就好了.相信你会的 

我来回复

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