#ifndef __fun_h__
#define __fun_h__
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct Node
{
union
{
int len;
datatype data;
};
struct Node *next;
struct Node *prev;
}*doublelink;
doublelink create(int flage);
int insert_head(doublelink L,datatype e);//头插
void output(doublelink L);
int insert_rear(doublelink L,datatype e);//尾插
int delete_head(doublelink L);//头删
int delete_rear(doublelink L);//尾删
int insert_pos(doublelink L,int pos,datatype e);//按位置插入
int insert_shan(doublelink L,int pos);//按位置删除
int insert_xiu(doublelink L,int pos,datatype e);//按位置修改
int insert_chazhao(doublelink L,pos);//按位置查找
#endif
ubuntu@ubuntu:~/12day/day2lianxi/6$ cat fun.c
#include"fun.h"
doublelink create(int flage)
{
doublelink L=(doublelink)malloc(sizeof(struct Node));
if(L==NULL)
{
return NULL;
}
if(flage ==0)
{
L->data=0;
}
else if(flage==1)
{
L->len==0;
}
L->next=NULL;
L->prev=NULL;
return L;
}
int insert_head(doublelink L,datatype e)
{
if(L==NULL)
{
return -1;
}
doublelink s=create(0);
if(s==NULL)
{
return -1;
}
s->data=e;
s->next=L->next;
s->prev=L;
if(L->next!=NULL)
{
L->next->prev=s;
}
L->next=s;
L->len++;
return 0;
}
void output(doublelink L)
{
if(L==NULL||L->next==NULL)
{
return;
}
doublelink p=L;
printf("正向输出:");
while(p->next!=NULL)
{
p=p->next;
printf("%c\t",p->data);
}
printf("\n逆向输出:");
while(p->prev!=NULL)
{
printf("%c\t",p->data);
p=p->prev;
}
puts("");
}
int insert_rear(doublelink L,datatype e)
{
if(L==NULL)
{
return -1;
}
doublelink s=create(0);
if(s==NULL)
{
return -1;
}
doublelink p=L;
while(p->next!=NULL)
{
p=p->next;
}
s->data=e;
s->prev=p;
p->next=s;
L->len++;
return 0;
}
int delete_head(doublelink L)
{
if(L==NULL||L->len==0)
{
return -1;
}
doublelink q=L->next;
L->next=q->next;
if(q->next!=NULL)
{
q->next->prev=L;
}
free(q);
q=NULL;
L->len--;
}
int delete_rear(doublelink L)
{
if(L==NULL||L->len==0)
{
return -1;
}
doublelink p=L;
while(p->next!=NULL)
{
p=p->next;
}
p->prev->next=NULL;
free(p);
p=NULL;
L->len--;
}
int insert_pos(doublelink L,int pos,datatype e)
{
if(L==NULL||pos<1||pos>L->len+1)
{
return -1;
}
doublelink p=L;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
doublelink s=create(0);
if(s==NULL)
{
return -1;
}
s->data=e;
s->next=p->next;
s->prev=p;
if(p->next!=NULL)
{
p->next->prev=s;
}
p->next=s;
L->len++;
return 0;
}
int insert_shan(doublelink L,int pos)
{
if(L==NULL||L->len==0||pos<1||pos>L->len)
{
return -1;
}
doublelink p=L;
for(int i=0;i<pos;i++)
{
p=p->next;
}
p->prev->next=p->next;
if(p->next!=NULL)
{
p->next->prev=p->prev;
}
free(p);
p=NULL;
L->len--;
return 0;
}
int insert_xiu(doublelink L,int pos,datatype e)
{
if(L==NULL||L->len==0||pos<1||pos>L->len)
{
return -1;
}
doublelink p=L;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
doublelink s=create(0);
if(s==NULL)
{
return -1;
}
s-next=p-next;
s-prev=p;
if(p-next!=NULL)
{
p->next->prev=s;
}
p-next=s;
L-len++;
return 0;
}
int insert_chazhao(doublelink L,pos)
{
if(L==NULL||L->len==0||pos<1||pos>L->len)
{
return -1;
}
doublelink p=L;
for(int i=0;i<len;i++)
{
p=p->next;
}
printf("%c",p->data);
return 0;
}
ubuntu@ubuntu:~/12day/day2lianxi/6$ cat main.c
#include"fun.h"
int main(int argc, const char *argv[])
{
doublelink L=create(1);
int n;
datatype e;
printf("输入要插入的数量:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("输入元素:");
scanf(" %c",&e);
// insert_head(L,e);
insert_rear(L,e);
}
/*output(L);
delete_head(L);
delete_rear(L);
output(L);*/
printf("输入位置:");
int pos;
scanf("%d",&pos);
printf("输入元素:");
scanf(" %c",&e);
insert_pos(L,pos,e);
output(L);
output(L);
return 0;
}
#ifndef __fun_h__
#define __fun_h__
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct Node
{
union
{
int len;
datatype data;
};
struct Node *next;
struct Node *prev;
}*doublelink;
doublelink create(int flag);
int insert_head(doublelink L,datatype e);//头插
int delete_head(doublelink L);//头删
int delete_wei(doublelink L);//尾删
void output(doublelink L);
#endif
ubuntu@ubuntu:~/12day/day2lianxi/7$ cat fun.c
#include"fun1.h"
doublelink create(int flag)
{
doublelink L=(doublelink)malloc(sizeof(struct Node));
if(L==NULL)
{
return NULL;
}
if(flag==1)
{
L->len=0;
L->next=L;
L->next=L;
}
else if(flag==0)
{
L->data=0;
L->next=NULL;
L->prev=NULL;
}
return L;
}
int insert_head(doublelink L,datatype e)
{
if(L==NULL)
{
return -1;
}
doublelink s=create(0);
if(s==NULL)
{
return -1;
}
s->data=e;
s->next=L->next;
s->prev=L;
L->next->prev=s;
L->next=s;
L->len++;
return 0;
}
int delete_head(doublelink L)
{
if(L==NULL||L->len==0)
{
return -1;
}
doublelink p=L->next;
L->next=p->next;
p->next->prev=L;
free(p);
p==NULL;
L->len--;
return 0;
}
int delete_wei(doublelink L)
{
if(L==NULL||L->len==0)
{
return -1;
}
doublelink p=L->prev;
L->prev=p->prev;
p->prev->next=p->next;
free(p);
p==NULL;
L->len--;
return 0;
}
void output(doublelink L)
{
if(L==NULL||L->len==0)
{
return ;
}
doublelink p=L;
printf("正向遍历:");
while(p->next!=L->prev)
{
p=p->next;
printf("%c\t",p->data);
}
putchar(10);
/* printf("逆向遍历:");
while(p->prev!=L)
{
printf("%c\t",p->data);
p=p->prev;
}
putchar(10);*/
}
ubuntu@ubuntu:~/12day/day2lianxi/7$ cat main.c
#include"fun1.h"
int main(int argc, const char *argv[])
{
doublelink L=create(1);
int n;
datatype e;
printf("输入插入数量:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("输入数据:");
scanf(" %c",&e);
insert_head(L,e);
}
output(L);
delete_head(L);
output(L);
delete_wei(L);
output(L);
return 0;
}