头文件与预处理;
#include<stdio.h>
#include<stdlib.h>
typedef int datetype;
typedef struct jr
{
datetype date;
struct jr* next;
}zjr;
初始化
指针head指向新开辟出来的jr类型的空间地址;指向地址
void start(zjr **head)//初始化
{
*head=(zjr*)malloc(sizeof(zjr));//指针head指向新开辟出来的jr类型的空间地址;指向地址
(*head)->next=NULL;
}
返回长度
int jrlength(zjr *head)//返回长度
{
zjr* p=head;
int size=0;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}
插入元素
int jradd(zjr *head,int i,datetype x)//插入元素
{
zjr *p;
zjr *q;
p=head;
int j;j=-1;
while(p->next!=NULL&&j<i-1)//最终j=i-1
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("插入位置错误!");
return 0;
}
q=(zjr *)malloc(sizeof(zjr));
q->date=x;
q->next=p->next;
p->next=q;
return 1;
}
删除元素
int jrdelect(zjr* head,int i,datetype* x)//删除元素
{
zjr* p=head;
zjr* s;
int j=-1;
while(p->next!=NULL&&p->next->next!=NULL&&j<i-1)//最终j=i-1
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("删除位置错误!");
return 0;
}
s=p->next;
*x=s->date;//获得数据
p->next=p->next->next;//连接
free(s);
return 1;
}
得到元素
int jrget(zjr* head,int i,datetype* x)//得到元素
{
zjr* p=head;
int j=-1;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
printf("得到位置错误!");
return 0;
}
*x=p->date;
return 1;
}
撤销链表
void destory(zjr**head)//撤销链表
{
zjr *p,*p1;
p=*head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
*head=NULL;
}
#include<stdio.h>
#include<stdlib.h>
typedef int datetype;
typedef struct jr
{
datetype date;
struct jr* next;
}zjr;
void start(zjr **head)//初始化
{
*head=(zjr*)malloc(sizeof(zjr));//指针head指向新开辟出来的jr类型的空间地址;指向地址
(*head)->next=NULL;
}
int jrlength(zjr *head)//返回长度
{
zjr* p=head;
int size=0;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}
int jradd(zjr *head,int i,datetype x)//插入元素
{
zjr *p;
zjr *q;
p=head;
int j;j=-1;
while(p->next!=NULL&&j<i-1)//最终j=i-1
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("插入位置错误!");
return 0;
}
q=(zjr *)malloc(sizeof(zjr));
q->date=x;
q->next=p->next;
p->next=q;
return 1;
}
int jrdelect(zjr* head,int i,datetype* x)//删除元素
{
zjr* p=head;
zjr* s;
int j=-1;
while(p->next!=NULL&&p->next->next!=NULL&&j<i-1)//最终j=i-1
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("删除位置错误!");
return 0;
}
s=p->next;
*x=s->date;//获得数据
p->next=p->next->next;//连接
free(s);
return 1;
}
int jrget(zjr* head,int i,datetype* x)//得到元素
{
zjr* p=head;
int j=-1;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
printf("得到位置错误!");
return 0;
}
*x=p->date;
return 1;
}
void destory(zjr**head)//撤销链表
{
zjr *p,*p1;
p=*head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
*head=NULL;
}
int main()
{
zjr* head;
int i,x;
start(&head);
for(i=0;i<10;i++)
{
jradd(head,i,i);
}
jrdelect(head,5,&x);
for(i=0;i<jrlength(head);i++)
{
jrget(head,i,&x);
printf("%d ",x);
}
destory(&head);//收回空间
}