zoukankan      html  css  js  c++  java
  • 线性表的链式表示

    上篇文章是线性表的顺序表示,本篇便是线性表的链式表示。

    主函数的步骤包括,输入线性表数据,对链表的删除,插入。利用指针进行对链表的访问。

    同时为了增加程序可读性,将结构体定义为LNode,*linklist。

    #include<iostream>
    //线性表的链式表示
    using namespace std;
    typedef struct LNode
    {
    	int data;
    	struct LNode *next;
    }LNode,*linklist;//指向结构体的指针变量 
    int initlist(linklist &l)//初始化链表 
    {
    	l=new LNode;//新的头节点 
    	l->next=NULL;
    	return 1;//成功初始化 
    }
    int getelem(linklist l,int i,int &e)//链表的取值 
    {
    	LNode *p;
    	p=l->next;
    	int j=1;
    	while(p&&i<j)
    	{
    		p=p->next;
    		j++;
    	}
    	if(!p||i>=j)  return 0;
    	e=p->data;
    	return 1;
    }
    int loateelem(linklist l,int e)//查找 
    {
    	linklist p;
    	int i;
    	p=l;
    	while(p)
    	{
    		p=p->next;
    		if (p->data==e)
    		  return 1;
    	}
    	if(!p)
    	 return 0;
    }
    int listinsert(linklist &l,int i,int e)//线性表的插入 
    {
    	linklist p,s;
    	s=new LNode;
    	int j=0;
    	p=l;
    	while(p&&j<(i-1))
    	{
    		p=p->next;
    		j++;
    	}
    	if(!p||j>(i-1))  return 0;
    	s->data=e;
    	s->next=p->next;
    	p->next=s;
    	return 1;
    }
    int listdelet(linklist &l,int i)//链表的删除 
    {
    	linklist p,q;
    	int j=0;
    	p=l;
    	while(p->next && j<(i-1))
    	{
    		p=p->next;
    		j++;
    	}
    	if(!(p->next)||j>(i-1))  return 0;
    	q=p->next;
    	p->next=p->next->next;
    	delete q;
    	
    	return 1;
    }
    void creatlist(linklist &l,int n)//创建链表 
    {
    	l=new LNode;
    	linklist p;
    	l->next=NULL;
    	for(int i=0;i<n;i++)
    	{
    		p=new LNode;
    		cin>>p->data;
    		p->next=l->next;
    		l->next=p;
    	}
    
    }
    int main()
    {
    	linklist l,p;
    	int n,i,j,k;
    	cin>>n;
    	initlist(l);//初始化链表 
    	creatlist(l,n);//创建链表 
    	p=l->next;//p指向首元节点 
    	for(i=0;i<n;i++)
    	{
    		cout<<p->data<<" ";//输出节点的数据域 
    		p=p->next;//p继续指向下一个节点 
    	}
    	cout<<endl<<"删除的数据:";//删除链表数据 
    	cin>>k;
    	if(listdelet(l,k)) 
    	{
    		cout<<"删除成功"<<endl;
    		p=l->next;
    		for(i=0;i<n-1;i++)
    		{
    			cout<<p->data<<" ";//输出节点的数据域 
    			p=p->next;//p继续指向下一个节点 
    		}
    	}
    	else cout<<"删除失败"<<endl;
    	cout<<endl<<"输入插入的位置与数值:";//插入数据 
    	cin>>j>>k;
    	if(listinsert(l,j,k));
    		{	
    			cout<<"插入成功"<<endl;
    			p=l->next;//p指向首元节点 
    			for(i=0;i<n;i++)
    			{
    				cout<<p->data<<" ";//输出节点的数据域 
    				p=p->next;//p继续指向下一个节点 
    			}
    		}
    	if(!listinsert(l,j,k))	cout<<"插入失败"<<endl;
    	return 0;	
    }


  • 相关阅读:
    《大话数据结构》第9章 排序 9.9 快速排序(下)
    [HTML5 DOM] dispatchEvent
    [AWS SAP] Exam Tips 2 Continues Improvement for Existing Solutions
    遇见C++ PPL:C++ 的并行和异步
    遇见C++ AMP:在GPU上做并行计算
    遇见C++ Lambda
    遇见C++ AMP:GPU的线程模型和内存模型
    服务器推技术
    转http状态码
    extjs同步与异步请求互换
  • 原文地址:https://www.cnblogs.com/young-for-you/p/7286909.html
Copyright © 2011-2022 走看看