#include<iostream>
#include<stdlib.h>
using namespace std;
#define Maxsize 50
typedef int ElemType;
//单链表定义
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode,*LinkList;
//等同于下面的
//struct LinkNode{
// ElemType data;
// struct LNode *next;
//};
//
//typedef struct LinkNode Linknode;//重命名,把 struct LinkNodeg换成Linknode
//typedef struct LinkNode *LinkList;//表示Linklist是指向 LinkNode的指针
//初始化一个单链表(带头结点)
bool InitList(LinkList &L)
{
L= (LinkNode*)malloc(sizeof(LinkNode));
if(NULL == L)
return false;
L->next = NULL;//防止脏数据
return true;
}
//头插法建立单链表
LinkList Insert_head(LinkList &L)
{
LinkNode *s;//LNode *s等同于 LinkList L
int x;
L=(LinkList)malloc(sizeof(LinkNode));//创建头节点
L->next = NULL;//初始为空链表
scanf("%d",&x);//输入节点的值
while(x!=Maxsize)//输入50表示结束
{
s = (LinkNode*)malloc(sizeof(LinkNode));//创建新节点
s->data = x;
s->next = L->next;
L->next = s;//将新节点插入表中,L为头指针
scanf("%d",&x);
}
return L;
}
头插法效果
//尾插法建立单链表
LinkList Insert_tail(LinkList &L)
{
LinkNode *s,*r;
int x;//与 ElemType一致
L = (LinkList)malloc(sizeof(LinkNode));//建立头节点
r = L;//r为表尾指针
scanf("%d",&x);//输入节点的值
while(x!=Maxsize)//输入50表示结束
{
s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
r->next = s;
r = s;//r指向新的表尾 ,r在移动
scanf("%d",&x);
}
r->next = NULL;//尾节点指针置空
return L;
}
尾插法效果
//按序号查找节点
LinkNode* Findvalue(LinkList L,int i)
{
int j = 1;
LinkNode* p = L->next;
if(i==0)return L;
if(i<1)return NULL;
while(p&&j<i)
{
p = p->next;
j++;
}
return p;
}
按序号查找效果
//按值查找
LinkNode* Getvalue(LinkList L,ElemType e)
{
LinkNode* p = L->next;
while(e!=p->data)
{
p = p->next;
}
return p;
}
按值查找效果
void Insertvalue(LinkList &L,int i,ElemType e)
{
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = e;
int j = 1;
LinkNode* p = L->next;
while(p&&j<i-1)
{
p=p->next;
j++;
}
s->next = p->next;
p->next = s;
}
插入值效果
//删除第i个节点
void DeleteNode(LinkList &L,int i)
{
int j=1;
LinkNode *p=L->next;
while(p&&j<i-1)
{
p=p->next;
j++;
}
LinkNode* s=p->next;
p->next=s->next;
free(s);
return ;
}
删除结点效果
int main()
{
LinkList hahaha;
InitList(hahaha);
//Insert_head(hahaha);
Insert_tail(hahaha);
//LinkNode* p = hahaha->next;指向第一个节点
LinkNode* p = hahaha->next;
while(p!=NULL)
{
cout<<p->data<<endl;
p = p->next;
}
//DeleteNode(hahaha,2);
//Insertvalue(hahaha,2,5);
//cout<<Findvalue(hahaha,3)->data;
//cout<<Findvalue(hahaha,3);
p = hahaha->next;
while(p!=NULL)
{
cout<<p->data<<endl;
p = p->next;
}
return 0;
}
main函数,验证效果时将注释那几句挑出来运行