#include
#include
#include
using namespace std;
//线性表链式存储的结构代码
#define ok 1
#define error 0
typedef int Elemtype;
typedef int status;
//定义
typedef struct Node
{
Elemtype data;
struct Node *next;
}Node;
typedef struct Node* linklist;
//这是定义一个结构体,这个结构体有两个属性,一个是int类型的data; 另一个是这个结构体本身类型的指针next;
//给这个结构定义了一个指针别名:LinkList;
//Node a; 声明一个struct Node结构体类型的结构体变量a;
//LinkList b; 等价于 struct Node* b; 等价于 Node *b; 声明一个struct Node结构体类型的指针变量 b;
//操作
void Creatlistheadz(linklist *L,int n);
void Creatlisttail(linklist *L,int n);
status Clearlist(linklist *L);
status Listinsert(linklist *L,int i,Elemtype e);
status Listdelete(linklist *L,int i,Elemtype *e);
void Inputlist(linklist L);
//单链表整表创建(头插法)
void Creatlistheadz(linklist *L,int n)
{
linklist p;
int i;
srand(time(0));
*L=(linklist)malloc(sizeof (Node));
(*L)->next=NULL; //建立一个带头结点的单链表
for(i=0;i
p=(linklist)malloc(sizeof(Node));
p->data=rand()%100+1;
p->next=(*L)->next;
(*L)->next=p;
}
}
//单链表整表创建(尾插法)
void Creatlisttail(linklist *L,int n)
{
linklist p,r;
int i;
srand(time(0));
*L=(linklist)malloc(sizeof (Node)); //建立一个带头结点的单链表
r=*L; //r为指向尾部的结点
注意:*L和r的区别,一个是链表,一个是结点
for(i=0;i
p=(linklist)malloc(sizeof(Node));
p->data=rand()%100+1;
r->next=p;
r=p;
}
r->next=NULL;
}
//删除单链表
status Clearlist(linklist *L)
{
linklist p,q;
p=(*L)->next; //p指向第一个结点
while(p)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL; //头结点的指针域为空
return ok;
}
//获得元素
status Getelem(linklist L,int i,Elemtype *e)
{
int j;
linklist p;
p=L->next;
j=1;
while(p&&j {
p=p->next;
++j;
}
if(!p||j>i)
return error;
*e=p->data;
return ok;
}
//插入算法
status Listinsert(linklist *L,int i,Elemtype e)
{
int j;
linklist p,s;
p=*L;
j=1;
while(p&&j {
p=p->next;
++j;
}
if(!p||j>i)
return error;
s=(linklist)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
return ok;
}
//删除算法
status Listdelete(linklist *L,int i,Elemtype *e)
{
int j;
linklist p,q;
p=*L;
j=1;
while(p&&j {
p=p->next;
++j;
}
if(!p||j>i)
return error;
q=p->next;
p->next=q->next;
free(q); //回收节点,释放内存
return ok;
}
void Inputlist(linklist L)
{
linklist p;
p=L->next;
int i=1,a;
while(p)
{
a=p->data;
cout<<"第"< p=p->next;
i++;
}
}
int main()
{
linklist L;
int e=0;
int b=20;
cout<<"创建一个新的单链表:"<
Inputlist(L);
cout<<"添加一个新的结点后单链表为:"<
Inputlist(L);
cout<<"删除一个结点后单链表为:"<
Inputlist(L);
cout<<"--------------------------"< system("pause");
cout<<"e="<
return 0;
}