Loading

单链表

#include <stdio.h>
#define ElemType int
//typedef int ElemType
int main(int argc, char **argv) {
	printf("Hello, World!\n");
	//单链表的定义
	typedef struct LNode{
	    ElemType data;
	    struct LNode *next
	}LNode,*LinkList;
	
	//不带头结点的单链表
	//初始化一个空的单链表
	bool InitList(LinkList &L)
	{
	    L=NULL;     //空表,暂时还没有任何结点
	    return true;
	}
	void test()
	{
	    LinkList L; //声明一个指向单链表的指针
	    InitList(L);//初始化一个空表
	    //后续代码······
	}
	//判断单链表是否为空
	bool Empty(LinkList L)
	{
	    return (L==NULL);
	}
	
	//带头结点的单链表
	//初始化一个空的单链表
	bool InitList(LinkList &L)
	{
	    L=(LNode*)malloc(sizeof(LNode));//分配一个头结点
	    if(L==NULL)return false;    //内存不足,分配失败
	    L->next=NULL;   //头结点之后是空的
	    return true;
	}
	void test()
	{
	    LinkList L; //声明一个指向单链表的指针
	    InitList(L);//初始化一个空表
	    //后续代码······
	}
	//判断单链表是否为空
	bool Empty(LinkList L)
	{
	    if(L->next==NULL)return true;
	    else return false;
	}
	//大部分时候使用有头结点的链表 
	
	//按位查找,返回第i个元素(带头结点)
	LNode * GetElem(LinkList L,int i)
	{
	    if(i<0)return NULL;
	    LNode *p; //指针p指向当前扫描到的结点
	    int j=0;    //当前p指向的是第几个结点
	    p=L;        //L指向头结点,头结点是第0个结点(不存数据)
	    while(p!=NULL&&j<i) //循环找到第i个结点
	    {
	        p=p->next;
	        j++;
	    }
	    return p;
	}
	//按值查找,找到数据域==e的结点
	LNode * LocationElem(LinkList L,int e)
	{
	    LNode *p=L->next;
	    //从第一个结点开始查找数据域为e的结点
	    while(p!=NULL&&p->data!=e)
	        p=p->next;
        return p;   //找到后返回该结点指针,否则返回NULL
	}
	//求表的长度
	int Length(LinkList L)
	{
	    int len=0;
	    LNode *p=L;
	    while(p->next!=NULL)
	    {
	        len++;
	        p=p->next;
	    }
	    return len;
	}
	//前插操作:在P结点之前插入元素e
	bool InsertPriorNode(LNode *p,ElemType e)
	{
	    if(p==NULL)return false;
	    LNode *s=(LNode *)malloc(sizeof(LNode));
	    if(s=NULL) return false;   //内存分配失败
	    
	    s->next=p->next;    
	    p->next=s;          //新结点连接在p之后
	    s->data=p->data;    //s结点变成p结点
	    p->date=e;     //p数据域覆盖为e,变成插入的结点
	    return true;
	}
	
}
posted @ 2022-03-17 10:54  sq800  阅读(36)  评论(0)    收藏  举报