#include <stdio.h>
#include <malloc.h>
#define ok 1
#define error 0
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*LinkList;
LinkList LinkedListInit()
{
LinkList L;
L = (LinkList)malloc(sizeof(LNode)); //申请结点空间
if(L == NULL) //判断是否有足够的内存空间
printf("申请内存空间失败\n");
L->next = NULL; //将next设置为NULL,初始长度为0的单链表
return L;
}
LinkList InsertList_head(LinkList head)//头插
{
LinkList p;
int i;
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
scanf("%d",&i);
while(i!=0)
{
p=(LinkList)malloc(sizeof(LNode));
//scanf("%d",&p->data);
p->data=i;
p->next=head->next;
head->next=p;
scanf("%d",&i);
}
return head;
}
LinkList InsertList_last(LinkList head)//尾插
{
LinkList p;
LinkList q;
int i;
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
q=head;
scanf("%d",&i);
while(i!=0)
{
p=(LinkList)malloc(sizeof(LNode));
//scanf("%d",&p->data);
p->data=i;
q->next=p;
q=p;
scanf("%d",&i);
}
q->next=NULL;
return head;
}
void deletelist(LinkList head,int i)//删除
{
LinkList p,q;
int j=1;
p=head->next;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(!p->next||j>i)
{
printf("error");
}
else{
q=p->next;
p->next=q->next;
free(q);
}
}
void InsertList(LinkList head,int i,int e)//插入
{
LinkList p,s;
int j=1;
p=head->next;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p->next||j>i)
printf("error");
else{
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
}
int Getelem(LinkList head,int i)//得到
{
LinkList p;
int e;
int j=1;
p=head->next;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p->next||j>i)
return error;
else{
e=p->next->data;
return e;
}
}
void Clearlist(LinkList head)//清空
{
LinkList p;
while(head->next)
{
p=head->next;
head->next=p->next;
}
free(p);
}
void Destroylist(LinkList head)//销毁
{
LinkList p;
if(head->next)
printf("error");
while(head)
{
p=head->next;
free(head);
head=p;
}
}
int Getlength(LinkList head)//长度
{
LinkList p;
int j=1;
p=head->next;
while(p)
{
p=p->next;
++j;
}
return j;
}
int main()
{
LinkList head,star;
int get;
head=LinkedListInit();
//head=InsertList_head(head);//头插
head=InsertList_last(head);//尾插
/*for(star=head->next;star!=NULL;star=star->next)
{
printf("%d ",star->data);
}*/
star=head->next;
while(star)
{
printf("%d ",star->data);
star=star->next;
}
printf("\n");
deletelist(head,3);//删除元素
star=head->next;
while(star)
{
printf("%d ",star->data);
star=star->next;
}
printf("\n");
InsertList(head,3,8);//插入元素
star=head->next;
while(star)
{
printf("%d ",star->data);
star=star->next;
}
printf("\n");
get=Getelem(head,2);//获取元素
printf("%d",get);
printf("\n");
Clearlist(head);//清空表
star=head->next;
while(star)
{
printf("%d ",star->data);
star=star->next;
}
return 0;
}
单链表--增删改查,头插尾插,清空销毁
最新推荐文章于 2022-04-14 00:03:12 发布