zoukankan      html  css  js  c++  java
  • 2019-02-06 单链表的整表创建及增删插

    #include<cstdio>
    #include<iostream>
    #include<ctime>
    using namespace std;
    #define MAXSIZE 20
    typedef int Elemtype;
    typedef int Status;		//Status表示状态
    
    typedef struct Node
    {
    	Elemtype data;
    	struct Node* next;
    }Node;
    
    typedef struct Node* LinkList;  //定义LinkList
    
    
    
    Status GetElem(LinkList L,int i,Elemtype *e)	//用e返回L中第i个元素的值
    {
    	int j=1;
    	LinkList p;
    	p = L->next;	//让p指向链表L的第一个结点 	
    	while(p&&j<i)	//p不为空且j还没有等于i
    	{
    		p = p->next;	//p指向下一个结点
    		++j;
    	}
    	if(!p || j>i)
    		return false;
    	*e = p->data;	//e返回i个元素的数据
    	return true;
    }
    
    
    Status ListInsert(LinkList* L,int i,Elemtype e)		//在L的第i个位置前插入新的数据元素e并使L的长度加1
    {
    	int j=1;
    	LinkList p,s;
    	p = *L;
    	j = 1;
    	while(p&&j<i)
    	{
    		p = p->next;
    		++j;
    	}
    	if(!p||j>i)
    		return false;
    	s = (LinkList)malloc(sizeof(Node));	//生成新的结点s
    	s->data = e;
    	s->next = p->next;
    	p->next = s;
    	return true;
    }
    
    Status ListDelete(LinkList* L,int i,Elemtype* e)	//删除L的第i个数据元素,用e返回其值,L的长度减1
    {
    	int j=1;
    	LinkList p,q;
    	p = *L;
    	while(p->next&&j<i)
    	{
    		p = p->next;
    		++j;
    	}
    	if(!(p->next) || j>i)
    		return false;
    	q = p->next;
    	p->next = q->next;
    	*e = q->data;
    	free(q);		//让系统回收此结点,释放内存
    	return true;
    }
    
    
    /*单链表的整表创建---头插法*/
    void CreateListHead(LinkList* L,int n)		//随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)
    {
    	LinkList p;
    	int i;
    	srand(time(0));		//初始化随机数种子
    	*L = (LinkList)malloc(sizeof(Node));
    	(*L) -> next = NULL;
    	for(i=0;i<n;i++)
    	{
    		p = (LinkList)malloc(sizeof(Node));
    		p->data = rand()%100 + 1; //随机生成100以内的数字
    		p->next = (*L)->next;
    		(*L)->next = p;
    	}
    }
    
    
    /*单链表的整表创建---尾插法*/
    void CreateListTail(LinkList* L,int n)
    {
    	LinkList p,r;
    	int i;
    	srand(time(0));
    	*L = (LinkList)malloc(sizeof(Node));
    	r = *L; 	//r为指向尾部的结点
    	for(i=0;i<n;i++)
    	{
    		p=(LinkList)malloc(sizeof(Node));
    		p->data = rand()%100+1;
    		r->next = p;
    		r = p;
    	}
    	r->next = NULL;
    }
    

    头插法和尾插法划重点


    来自大话数据结构一书 发现数据结构好难肯啊QAQ 看起来逻辑挺简单,一用C语言实现脑袋就乱七八糟,最后还是照着书打了一遍

  • 相关阅读:
    《Unix/Linux系统编程》第九章学习笔记
    第1、2章学习笔记
    第11章学习笔记(20191213兰毅达)
    第7、8章学习笔记(20191213兰毅达)
    sort(20191213兰毅达)
    # 电子公文传输系统团队项目 团队作业(一):团队展示
    第10章学习笔记(20191213兰毅达)
    MyOD(选做)(20191213兰毅达)
    2019-2020-1 20191213兰毅达《信息安全专业导论》第十二周学习总结
    2019-2020-1 20191213兰毅达《信息安全专业导论》第十一周学习总结
  • 原文地址:https://www.cnblogs.com/roccoshi/p/13027097.html
Copyright © 2011-2022 走看看