第3周项目1 顺序表的基本运算(3)

  1. /*     
  2. Copyright (c)2015,烟台大学计算机与控制工程学院     
  3. All rights reserved.     
  4. 文件名称:第3周项目1 - 顺序表的基本运算(3).cpp     
  5. 作    者:陈胜男  
  6. 完成日期:2015年10月9日     
  7. 版 本 号:v1.0     
  8.      
  9. 问题描述:(3)其余的4个基本运算:插入数据元素ListInsert、删除数据元素ListDelete、 
  10.            初始化线性表InitList、销毁线性表DestroyList都可以同法完成。  
  11.        刚才的测试函数已经变得庞大。基本运算的模块保留,用于测试的main函数 
  12.            可以改变。main函数的针对性越强,实践越有效。 
  13. 输入描述: 若干数据 。   
  14. 程序输出: 1.线性表的长度。  
  15.            2.第3个元素及其值的大小。    
  16.            3.8在表中的第几位。 
  17.            4.删除的元素。 
  18.            5.删除后的线性表。 
  19.            6.删除线性表。 
  20. */   
  21. 程序如下
    #include <stdio.h>
    #include <malloc.h>
    
    #define MaxSize 50    
    typedef int ElemType;   
    typedef struct
    {
        ElemType data[MaxSize]; 
        int length;
    } SqList;
    void InitList(SqList *&L);    
    void ListInsert(SqList *L,int i,int b);   
    void DispList(SqList *L);    
    bool ListEmpty(SqList *L); 
    void DestroyList(SqList *L); 
    int ListDelete(SqList *, int , int &);
    bool ListEmpty(SqList *L);
    int ListLength(SqList *L);
    int LocateElem(SqList *l, ElemType e);
    bool GetElem(SqList *l,int i,ElemType &e);
    int main()
    {
        SqList *sq;
    	int e,a,loc;
    	int i=2;
        InitList(sq);
        ListInsert(sq, 1, 5);
        ListInsert(sq, 2, 3);
        ListInsert(sq, 1, 4);
        DispList(sq);
        printf("线性表的长度:%d\n",ListLength(sq));
    	if(GetElem(sq, 3, a))    
            printf("找到了第3个元素值为:%d\n", a);  
        else  
          printf("第3个元素超出范围!\n");  
    	if((loc=LocateElem(sq, 8))>0)    
            printf("找到了,值为8的元素是第 %d 个\n", loc);  
        else  
           printf("值为8的元素木有找到!\n");  
    
    	ListDelete(sq,i,e);
    	printf("删除的元素是:%d\n",e);
    	printf("删除后的线性表:");
    	DispList(sq);
    
    
    	DestroyList(sq);
        return 0;
    }
     
    void DispList(SqList *L)
    {
        int i;
        if (ListEmpty(L))
            return;
        for (i=0; i<L->length; i++)
            printf("%d ",L->data[i]);
        printf("\n");
    }
    
     
    bool ListEmpty(SqList *L)
    {
        return(L->length==0);
    }
    
     
    void InitList(SqList *&L)
    {
        L=(SqList *)malloc(sizeof(SqList)); 
        L->length=0;
    
    }
    
    void ListInsert(SqList *L,int i,int b)   
    {
       int j;
    
        if(i<1)
        {
            printf("插入位置非法/n");
        }
     i=i-1;
     if(L->length==0)
     {
     
      L->data[i]=b;
      L->length++;
     }
    
    
     else 
     {
        for(j=L->length;j>i;j--)
        {
            L->data[j]=L->data[j-1];
        }
        L->data[i]=b;
        L->length++;
     }
    
    }
    
    void DestroyList(SqList *L)
    {
    	free(L);
    	printf("线性表已经被释放!线性表的长度:%d",L->length);
    	printf("\n(由于线性表已经被释放所以显示的长度为随机值)");
    }
    
    int ListDelete(SqList *L, int i, int &e)
    {
    	i--;
    	int n=0;
    	while(n<i)
    		n++;
    	if(L->length>n)
    	{
    		e=L->data[n];
    		while(n<L->length-1)
    		{
    			L->data[n]=L->data[n+1];
    			n++;
    		
    		}
    		L->length--;
    		
    	}
    	return e;
    
    }
    int ListLength(SqList *L)
    {
    	return L->length;
    }
    
    bool GetElem(SqList *l,int i,ElemType &e)  
    {  
        if(i<1||i>l->length)  
            return false;  
        e=l->data[i-1];  
            return true;  
     
    }  
    int LocateElem(SqList *l, ElemType e)  
    {  
        int i=0;  
        while(l->length>i&&l->data[i]!=e)  
       {  
            i++;  
       }  
       if(i>=l->length)  
      {  
            return 0;  
        }  
       return i+1;  
    } 

    运行结果如下
  22. 第3周项目1 顺序表的基本运算(3)_第1张图片
  23.  知识点总结:插入、删除数据元素,初始化、销毁线性表的程序编写
  24. 学习心得: 不太能理解。。。需要参考老师和同学们编写的代码才能运行成功,加强练习,弥补不足。

你可能感兴趣的:(第3周项目1 顺序表的基本运算(3))