• 2019-02-03 线性表的顺序储存结构C语言实现


    #include<cstdio>
    #define MAXSIZE 20
    
    typedef int Elemtype;	//Elemtype类型根据实际情况而定,这里取int
    typedef struct 
    {
    	int data[MAXSIZE];
    	int length;
    }Sqlist;		//线性表的顺序储存结构
    
    
    
    //线性表的抽象数据类型
    Sqlist InitList(Sqlist* L)		//初始化建立一个空表
    {
    	Sqlist list;
    	L->length = 0;
    	list.length = L->length;
    	for(int i=0;i<MAXSIZE;++i)
    		list.data[i] = 0;
    	return list;
    }	
    
    bool ListEmpty(Sqlist* L){			//若线性表为空返回true不然返回false
    	if(L->length==0) return true;
    	return false;
    	
    }	
    
    bool ClearList(Sqlist *L)			//清空线性表
    {
    	for(int i=0;i<MAXSIZE;++i)
    		L->data[i] = 0;
    	return true;
    }	
    
    bool GetElem(Sqlist L,int i,Elemtype* e)		//将线性表的第i个位置元素返回给e,若不存在返回false
    {
    	if(L.length==0 || i<1 || i>L.length)
    		return false;
    	*e = L.data[i-1];	//因为return返回状态,故这里用指针实现
    	return true;
    }	
    
    int LocateElem(Sqlist* L,Elemtype e)		//在线性表L中查找与给定值e相等的元素,若查找成功,返回该元素在表中的标号表示成功;否则返回0表示失败
    {
    	for(int i=0;i<L->length;++i)
    	{
    		if(L->data[i] == e)	return i;
    	}
    	return false;
    }	
    
    
    bool ListInsert(Sqlist* L,int i,Elemtype e)		//在线性表L中的第i个位置插入新元素e
    {
    	int k;
    	if(L->length == MAXSIZE)
    		return false;
    	if(i<1 || i>L->length)
    		return false;
    	if(i<=L->length)
    	{
    		for(k=L->length-1;k>=i-1;k--)	//将要插入位置之后的数据依次后移
    			L->data[k+1] = L->data[k];
    	}
    	L->data[i-1] = e;	//插入元素e
    	L->length++;		//长度+1
    	return true;
    }	
    
    
    bool ListDelete(Sqlist* L,int i,Elemtype* e)		//删除线性表L中的第i个位置元素,并用e返回其值
    {
    	int k;
    	if(L->length == 0)
    		return false;
    	if(i<1 || i>L->length)
    		return false;
    	*e = L->data[i-1];
    	if(i<L->length)	//删除位置后继元素前移
    	{
    		for(k=i;k<L->length;k++)
    			L->data[k-1] = L->data[k];
    	}
    	L->length--;
    	return true;
    }	
    
    int ListLength(Sqlist *L)		//返回线性表L的元素个数
    {
    	int k=0;
    	for(int i=0;i<MAXSIZE;++i)
    	{
    		if(L->data[i] != 0) ++k;
    	}
    	L->length = k;
    	return k;
    }	
    
    
    	
    }
    

    线性表的顺序结构及基本操作

    虽然很简单,但是因为我菜,还是弄了蛮久
    遇到的两个问题:

    Elemtype* e = NULL;
    //之后函数里给e赋值,就崩了,原来空指针是不能进行赋值操作的
    //改为:
    Elemtype a;
    Elemtype* e = a;
    //ok了
    

    还有一个问题待解决:
    我这里计算线性表长度的时候是计算了非0元素的个数,初始化时把线性表元素默认初始化为0了,不知道有没有什么好的解决方法,但是链式储存应该就不会有此类问题了(明天再玩)


    就酱

  • 相关阅读:
    Python接口自动化(四) https请求(SSLError解决办法)
    Python接口自动化(三)post请求四种传送正文方式
    Python接口自动化(二) 发送post请求的接口;发送post【data】;python中字典和json的区别
    requests高级用法
    HDU-1874-畅通工程续 (队列优化)
    Codeforces Round #387 (Div. 2) D. Winter Is Coming
    Codeforces Round #387 (Div. 2) C. Servers
    Codeforces Round #387 (Div. 2) B. Mammoth's Genome Decoding
    Codeforces Round #387 (Div. 2) A. Display Size
    Codeforces Round #386 (Div. 2) B. Decoding
  • 原文地址:https://www.cnblogs.com/roccoshi/p/13027100.html
Copyright © 2020-2023  润新知