- 初始化
- 建表
- 头插法
- 尾插法
- 按位置查找
- 按值查找
初始化
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是结构体指针变量,且内容中包含指针以后还是比较好理解的