#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct Node
{
union{
int len;
datatype data;
};
struct Node *next;
}*linklist;
int delete_rear(linklist L);
int search_pos(linklist L,int pos);
int delete_pos(linklist L,int pos);
int insert_pos(linklist L,int pos,datatype e);
int delete_head(linklist L);
int insert_rear(linklist L,datatype e);
linklist create_head(int flag);
int insert_head(linklist L,datatype e);
void output(linklist L);
void rev_lilinklist(linklist L);
int search_data(linklist L,datatype e);
#endif
#include "head.h"
int main(int argc, const char *argv[])
{
linklist L=create_head(1);
#if 0
int n;
datatype e;
printf("请输入插入数据元素的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入插入的值:");
scanf("%d",&e);
insert_head(L,e);
}
output(L);
#endif
int n;
int pos;
datatype e;
printf("请输入插入数据元素的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入插入的值:");
scanf("%d",&e);
insert_rear(L,e);
}
output(L);
#if 0
delete_head(L);
delete_head(L);
printf("头删的结果是\n");
output(L);
#endif
#if 0
delete_rear(L);
delete_rear(L);
output(L);
#endif
#if 0
printf("请输入插入的位置:");
scanf("%d",&pos);
printf("请输入插入的值:");
scanf("%d",&e);
insert_pos(L,pos,e);
output(L);
printf("请输入删除的位置:");
scanf("%d",&pos);
delete_pos(L,pos);
output(L);
printf("请输入查找的位置:");
scanf("%d",&pos);
search_pos(L,pos);
#endif
printf("请输入查找的元素:");
scanf("%d",&e);
pos=search_data(L,e);
if(pos==-1)
{
printf("查找失败\n");
}
else
{
printf("在%d位置查找成功\n",pos);
}
rev_lilinklist(L);
output(L);
return 0;
}
#include "head.h"
linklist create_head(int flag)
{
linklist L=(linklist)malloc(sizeof(struct Node));
if(L==NULL)
{
return NULL;
}
if(flag==1)
{
L->len=0;
}
else if(flag==0)
{
L->data=0;
}
L->next=NULL;
return L;
}
#if 0
linklist create_node()
{
linklist p=(linklist)malloc(sizeof(struct Node));
if(p==NULL)
{
return NULL;
}
p->data=0;
p->next=NULL;
return p;
}
#endif
int insert_head(linklist L,datatype e)
{
if(L==NULL)
{
printf("头插失败\n");
return -1;
}
linklist s=create_head(0);
if(s==NULL)
{
return -1;
}
s->data=e;
s->next=L->next;
L->next=s;
L->len++;
}
void output(linklist L)
{
if(L==NULL || L->len==0)
{
printf("遍历失败\n");
return;
}
#if 0
linklist p=L;
for(int i=0;i<L->len;i++)
{
p=p->next;
printf("%d\t",p->data);
}
#else
linklist p=L;
while(p->next!=NULL)
{
p=p->next;
printf("%d\t",p->data);
}
#endif
puts("");
}
int insert_rear(linklist L,datatype e)
{
if(L==NULL)
{
return -1;
}
linklist p=L;
while(p->next!=NULL)
{
p=p->next;
}
linklist s=create_head(0);
if(s==NULL)
{
return -1;
}
s->data=e;
p->next=s;
L->len++;
}
int delete_head(linklist L)
{
if( L==NULL || L->next==NULL)
{
return -1;
}
linklist q=L->next;
L->next=q->next;
free(q);
q=NULL;
L->len--;
}
int delete_rear(linklist L)
{
if(L==NULL || L->next==NULL)
{
return -1;
}
linklist p=L;
while(p->next->next!=NULL)
{
p=p->next;
}
linklist q=p->next;
p->next=q->next;
free(q);
q=NULL;
L->len--;
}
int insert_pos(linklist L,int pos,datatype e)
{
if(L==NULL || pos<1 || pos>L->len+1)
{
printf("插入失败\n");
return -1;
}
linklist p=L;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
linklist s=create_head(0);
if(s==NULL)
{
return -1;
}
s->data=e;
s->next=p->next;
p->next=s;
L->len++;
return 0;
}
int delete_pos(linklist L,int pos)
{
if(L==NULL || L->next==NULL || pos<1||pos>L->len)
{
return -1;
}
linklist p=L;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
linklist q=p->next;
p->next=q->next;
free(q);
q=NULL;
L->len--;
return 0;
}
int search_pos(linklist L,int pos)
{
if(L==NULL ||L->next==NULL || pos<1|| pos>L->len)
{
return -1;
}
linklist p=L;
for(int i=0;i<pos;i++)
{
p=p->next;
}
printf("查找的值是:%d\n",p->data);
return 0;
}
int search_data(linklist L,datatype e)
{
if(L==NULL || L->next==NULL)
{
return -1;
}
linklist p=L;
int pos=1;
while(p->next!=NULL)
{
p=p->next;
if(p->data==e)
{
return pos;
}
pos++;
}
return -1;
}
void rev_lilinklist(linklist L)
{
if(L==NULL ||L->next==NULL)
{
return;
}
if(L->len==1)
{
printf("只有一个元素,无需逆置\n");
return;
}
linklist p=L->next;
L->next=NULL;
while(p!=NULL)
{
linklist t=p;
p=p->next;
t->next=L->next;
L->next=t;
}
}