数据结构 day4 线性表的链式存储 2019.7.6

  • 初始化
  • 建表
  • 头插法
  • 尾插法
  • 按位置查找
  • 按值查找

初始化

typedef struct Node
{
	ElemType data;
	Node *next;
}Node,*LinkList;//LinkList=Node *,是一个别名,定义的是一个结构体指针变量,是一个变量 
int main()
{
	
	return 0;
} 

建表

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
#define ElemType int
#define OK 1
#define ERROR 0


typedef struct Node 
{
	ElemType data;
	Node *next;
}Node,*LinkList;//LinkList=struct Node*,就是定义一个结构体指针类型的变量,然后LInkList还是一个别名 

void InitList(LinkList *H);
 
int main()
{
	LinkList head;//Node* head 。head为一个变量 
	InitList(&head);//传入变量的地址 
	return 0;
} 

void InitList(LinkList *H)//定义的是结构体指针类型的变量的指针 
{//malloc是void无返回值的,所以需要强制转换 
	*H=(LinkList)malloc(sizeof(Node));//把申请的空间强行转换成结构体指针变量,然后H是结构体指针变量指针,加个*就是结构体指针变量了
	//所以其实就是一个赋值变量的过程 
	(*H)->next=NULL;//->的优先级大于++大于*,所以()是先运算的意思 
	//其次,变量里的内容是ElemType和Node *next(LinkList=Node *,开辟的是上面Negev结构体),所以可以直接指向 
}

头插法

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
#define ElemType char
#define OK 1
#define ERROR 0


typedef struct Node
{
	ElemType data;
	Node *next; 
}Node,*LinkList;//LinkList=struct Node*,就是定义一个结构体指针类型的变量,然后LInkList还是一个别名 

void InitList(LinkList *H);
void CreateFormHead(LinkList H); 
 
int main()
{
	LinkList head;//Node* head 。head为一个变量 
	InitList(&head);//传入变量的地址 
	CreateFormHead(head);
	return 0;
} 

void InitList(LinkList *H)//定义的是结构体指针类型的变量的指针 
{//malloc是void无返回值的,所以需要强制转换 
	*H=(LinkList)malloc(sizeof(Node));//把申请的空间强行转换成结构体指针变量,然后H是结构体指针变量指针,加个*就是结构体指针变量了
	//所以其实就是一个赋值变量的过程 
	(*H)->next=NULL;//->的优先级大于++大于*,所以()是先运算的意思 
	//其次,变量里的内容是ElemType和Node *next(LinkList=Node *,开辟的是上面Negev结构体),所以可以直接指向 
}


void CreateFormHead(LinkList H)
{
	char c;
	int flag=1;
	Node *s;
	while(flag)
	{
		printf("input data please\n");
		c=getchar();
		getchar();
		if(c!='$')
		{
			s=(Node *)malloc(sizeof(Node));
			s->data=c;
			s->next=H->next;
			H->next=s;  
		}
		else
		{
			flag=0;
		}
	}
	
} 

//研究发现,H其实是一个指向头链表的结构体指针变量,变量内容中只含有头链表的next结点
//所以头插法过程是先把S->next=H->next(即NULL)H是结构体指针变量,没必要传入它的地址,因为它的内容就是next结点
//最后把H->next=s,把新开辟的结点给他就好 

附上图片帮助理解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

尾插法

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
#define ElemType char
#define OK 1
#define ERROR 0


typedef struct Node
{
	ElemType data;
	Node *next;
}Node,*LinkList;//LinkList=struct Node*,就是定义一个结构体指针类型的变量,然后LInkList还是一个别名 

void InitList(LinkList *H);
void CreateFormTail(LinkList H); 
 
int main()
{
	LinkList head;//Node* head 。head为一个变量 
	InitList(&head);//传入变量的地址 
	CreateFormTail(head);
	return 0;
} 

void InitList(LinkList *H)//定义的是结构体指针类型的变量的指针 
{//malloc是void无返回值的,所以需要强制转换 
	*H=(LinkList)malloc(sizeof(Node));//把申请的空间强行转换成结构体指针变量,然后H是结构体指针变量指针,加个*就是结构体指针变量了
	//所以其实就是一个赋值变量的过程 
	(*H)->next=NULL;//->的优先级大于++大于*,所以()是先运算的意思 
	//其次,变量里的内容是ElemType和Node *next(LinkList=Node *,开辟的是上面Negev结构体),所以可以直接指向 
}


void CreateFormTail(LinkList H)
{
	char c;
	int flag=1;
	Node *s,*r;
	r=H;//把H中的内容指针给r ,r指向表尾,方便插入 
	while(flag)
	{
		printf("input data please\n");
		c=getchar();
		getchar();
		if(c!='$')
		{
			s=(Node *)malloc(sizeof(Node));
			s->data=c;
			r->next=s;
			r=s;  //继续移到表尾 
		}
		else
		{
			flag=0;
			r->next=NULL;
		}
	}
	
} 




按位置查找

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
#define ElemType char 
#define OK 1
#define ERROR 0


typedef struct Node
{
	ElemType data;
	Node *next;
}Node,*LinkList;//LinkList=struct Node*,就是定义一个结构体指针类型的变量,然后LInkList还是一个别名 

void InitList(LinkList *H);
void CreateFormHead(LinkList H);
Node * Get(LinkList L,int i);
 
int main()
{
	LinkList head;//Node* head 。head为一个变量 
	Node *p;
	InitList(&head);//传入变量的地址 
	CreateFormHead(head);
	p=Get(head,4);
	printf("%c",p->data);
	return 0;
} 

void InitList(LinkList *H)//定义的是结构体指针类型的变量的指针 
{//malloc是void无返回值的,所以需要强制转换 
	*H=(LinkList)malloc(sizeof(Node));//把申请的空间强行转换成结构体指针变量,然后H是结构体指针变量指针,加个*就是结构体指针变量了
	//所以其实就是一个赋值变量的过程 
	(*H)->next=NULL;//->的优先级大于++大于*,所以()是先运算的意思 
	//其次,变量里的内容是ElemType和Node *next(LinkList=Node *,开辟的是上面Negev结构体),所以可以直接指向 
}


Node * Get(LinkList L,int i)
{
	int j=1;
	Node *p;
	p=L;
	while(j<i&&p->next!=NULL)
	{
		p=p->next;
		j++;
	}
	if(j==i)
		return p;
	else
		return NULL;
} 

void CreateFormHead(LinkList H)
{
	char c;
	int flag=1;
	Node *s;
	while(flag)
	{
		printf("input data please\n");
		c=getchar();
		getchar();
		if(c!='$')
		{
			s=(Node *)malloc(sizeof(Node));
			s->data=c;
			s->next=H->next;
			H->next=s;  
		}
		else
		{
			flag=0;
		}
	}
	
} 

按值查找

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
#define ElemType char
#define OK 1
#define ERROR 0


typedef struct Node
{
	ElemType data;
	Node *next;
}Node,*LinkList;//LinkList=struct Node*,就是定义一个结构体指针类型的变量,然后LInkList还是一个别名 

void InitList(LinkList *H);
void CreateFormHead(LinkList H); 
int Get(LinkList L,ElemType e);
 
int main()
{
	LinkList head;//Node* head 。head为一个变量 
	InitList(&head);//传入变量的地址 
	CreateFormHead(head);
	printf("%d",Get(head,'4'));
	return 0;
} 

void InitList(LinkList *H)//定义的是结构体指针类型的变量的指针 
{//malloc是void无返回值的,所以需要强制转换 
	*H=(LinkList)malloc(sizeof(Node));//把申请的空间强行转换成结构体指针变量,然后H是结构体指针变量指针,加个*就是结构体指针变量了
	//所以其实就是一个赋值变量的过程 
	(*H)->next=NULL;//->的优先级大于++大于*,所以()是先运算的意思 
	//其次,变量里的内容是ElemType和Node *next(LinkList=Node *,开辟的是上面Negev结构体),所以可以直接指向 
}


void CreateFormHead(LinkList H)
{
	char c;
	int flag=1;
	Node *s;
	while(flag)
	{
		printf("input data please\n");
		c=getchar();
		getchar();
		if(c!='$')
		{
			s=(Node *)malloc(sizeof(Node));
			s->data=c;
			s->next=H->next;
			H->next=s;  
		}
		else
		{
			flag=0;
		}
	}
	
} 


int Get(LinkList L,ElemType e)
{
	int i=0;
	Node *p;
	p=L;
	while(p->next!=NULL&&p->data!=e)
	{
		i++;
		p=p->next;
	}
	if(p->next!=NULL)
		return i;
	else
		return ERROR;
} 


其实搞清楚H是结构体指针变量,且内容中包含指针以后还是比较好理解的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值