zoukankan      html  css  js  c++  java
  • C++编程练习(2)----“实现简单的线性表的链式存储结构“

    单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。

    对于查找操作,单链表的时间复杂度为O(n)。

    对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1)。

    单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制。


    链式存储结构中,结点由存放数据元素的数据域和存放后继结点地址的指针域组成。

    具体代码如下:

    #include<iostream>
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define ERROR 0
    typedef int ElemType;
    typedef int Status;
    
    struct Node{
    public:
    	Node():data(0),next(NULL) {};
    	ElemType data;
    	Node *next;
    	Status GetElem(int i,ElemType *e) const;
    	Status ListInsert(int i,ElemType e);
    	Status ListDelete(int i,ElemType *e);
    	Status ShowList();
    };
    
    Status Node::GetElem(int i,ElemType *e) const
    {
    	int j=1;	/*j为计数器*/
    	Node *p=new Node;
    	p=next;
    	while (p && j<i)
    	{
    		p=p->next;
    		++j;
    	}
    	if (!p || j>i)
    		return ERROR;
    	*e=p->data;
    	return OK;
    }
    
    /*初始条件:顺序线性表已存在,1<=i<=ListLength*/
    /*操作结果:在表中第i个结点位置之前插入新的数据元素e,链表长度加1*/
    Status Node::ListInsert(int i,ElemType e)
    {
    	int j=1;
    	Node *p=new Node;
    	Node *s=new Node;
    	p=this;
    	while (p && j<i)
    	{
    		p=p->next;
    		++j;
    	}
    	if (!p || j>i)
    		return ERROR;
    	s->data=e;
    	s->next=p->next;
    	p->next=s;
    	return OK;
    }
    
    /*初始条件:线性表已经存在,1<=i<=ListLength*/
    /*操作结果:删除表的第i个结点,并用e返回其值,线性表长度减1*/
    Status Node::ListDelete(int i,ElemType *e)
    {
    	int j;
    	Node* p=new Node;
    	Node* q=new Node;
    	p=this;
    	j=1;
    	while(p->next && j<i)
    	{
    		p=p->next;
    		++j;
    	}
    	if (!(p->next) || j>i)
    		return ERROR;
    	q=p->next;		/*要删除的结点是p->next*/
    	p->next=q->next;
    	*e=q->data;
    	delete q;
    	return OK;
    }
    
    Status Node::ShowList() 
    {
    	Node* p=new Node;
    	p=this;
    	while (p->next)
    	{
    		std::cout<<p->data<<"  ";
    		p=p->next;
    	}
    	std::cout<<p->data<<std::endl;
    	return OK;
    }

    单链表适用的场景:

    1、需要频繁插入和删除时。

    2、线性表中的元素个数变化较大或者根本不知道多大时。

  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/fengty90/p/3768861.html
Copyright © 2011-2022 走看看