关于双向循环链表基本操作
2018-02-11 02:37
477 查看
简单写了一下,留作纪念,欢迎指错----->
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
int val;
struct _node *next;
struct _node *prev;
}Node;
typedef struct _list
{
Node *head;
Node *tail;
Node *sign_next;
Node *sign_prev;
}List;
void Creat_list(List *list)
{
int len=4;
for(int i=0;i<len;++i) {
Node *p = (Node *) malloc(sizeof(Node));
p->val = i;
if (!i) {
list->head = p;
list->tail = list->head;
list->tail->next = list->tail->prev = list->tail;
} else {
list->tail->next = p;
list->tail->next->prev = list->tail;
list->tail = p;
}
}
list->tail->next=list->head;
}
void Printf_list(List*list)
{
Node *p=list->tail;
while(1)
{
printf("%d",p->val);
if(p==list->head)
break;
p=p->prev;
}
}
int Check_list(List*list)
{
int n;
printf("please input n");
scanf("%d",&n);
Node *p=list->tail;
int count=0;
while(1)
{
count++;
if(n==count)
{
list->sign_prev=p;
list->sign_next=p->next;
break;
}
p=p->prev;
}
return n;
}
void Input_list(List*list)
{
printf("Input list");
int n=Check_list(list);
Node *p=(Node*)malloc(sizeof(Node));
p->val=9;
p->next = list->sign_next;
p->prev = list->sign_prev;
list->sign_prev->next = p;
list->sign_next->prev = p;
if(n==1)
list->tail=p;
}
void Delete_list(List*list)
{
printf("Delete list");
int n=Check_list(list);
Node *q=list->sign_prev->prev;
q->next=list->sign_next;
list->sign_next->prev=q;
if(n==1)
list->tail=list->sign_prev->prev;
free(list->sign_prev);
}
void Printf_list_back(List *list)
{
Node *p=list->head;
while(1)
{
printf("%d",p->val);
if(p==list->tail)
break;
p=p->next;
}
}
void Free_list(List*list)
{
Node *p=list->head;
Node *q=NULL;
while(1)
{
if(p==list->tail)
break;
q=p->next;
free(p);
p=q;
}
}
int main(void)
{
List list;
list.head=list.tail=list.sign_next=list.sign_prev=NULL;
Creat_list(&list);
Input_list(&list);
Delete_list(&list);
printf("Printf_back_order_list");
Printf_list(&list);
printf("\n");
printf("Printf_normal_order_list");
Printf_list_back(&list);
Free_list(&list);
}
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
int val;
struct _node *next;
struct _node *prev;
}Node;
typedef struct _list
{
Node *head;
Node *tail;
Node *sign_next;
Node *sign_prev;
}List;
void Creat_list(List *list)
{
int len=4;
for(int i=0;i<len;++i) {
Node *p = (Node *) malloc(sizeof(Node));
p->val = i;
if (!i) {
list->head = p;
list->tail = list->head;
list->tail->next = list->tail->prev = list->tail;
} else {
list->tail->next = p;
list->tail->next->prev = list->tail;
list->tail = p;
}
}
list->tail->next=list->head;
}
void Printf_list(List*list)
{
Node *p=list->tail;
while(1)
{
printf("%d",p->val);
if(p==list->head)
break;
p=p->prev;
}
}
int Check_list(List*list)
{
int n;
printf("please input n");
scanf("%d",&n);
Node *p=list->tail;
int count=0;
while(1)
{
count++;
if(n==count)
{
list->sign_prev=p;
list->sign_next=p->next;
break;
}
p=p->prev;
}
return n;
}
void Input_list(List*list)
{
printf("Input list");
int n=Check_list(list);
Node *p=(Node*)malloc(sizeof(Node));
p->val=9;
p->next = list->sign_next;
p->prev = list->sign_prev;
list->sign_prev->next = p;
list->sign_next->prev = p;
if(n==1)
list->tail=p;
}
void Delete_list(List*list)
{
printf("Delete list");
int n=Check_list(list);
Node *q=list->sign_prev->prev;
q->next=list->sign_next;
list->sign_next->prev=q;
if(n==1)
list->tail=list->sign_prev->prev;
free(list->sign_prev);
}
void Printf_list_back(List *list)
{
Node *p=list->head;
while(1)
{
printf("%d",p->val);
if(p==list->tail)
break;
p=p->next;
}
}
void Free_list(List*list)
{
Node *p=list->head;
Node *q=NULL;
while(1)
{
if(p==list->tail)
break;
q=p->next;
free(p);
p=q;
}
}
int main(void)
{
List list;
list.head=list.tail=list.sign_next=list.sign_prev=NULL;
Creat_list(&list);
Input_list(&list);
Delete_list(&list);
printf("Printf_back_order_list");
Printf_list(&list);
printf("\n");
printf("Printf_normal_order_list");
Printf_list_back(&list);
Free_list(&list);
}
相关文章推荐
- 循环双向链表的基本操作
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 双向循环链表基本操作
- 【数据结构】-线性表-双向循环链表-1328:链表的基本操作【好题】
- 双向循环链表基本操作(C语言版)
- 双向循环链表的基本操作
- 实战数据结构(5)_双向循环链表的基本操作
- 双向循环链表的基本操作
- 双向循环链表的基本操作
- 双向循环链表基本操作的实现(C语言)
- 不带头节点的双向循环链表的基本操作
- 实战数据结构(5)_双向循环链表的基本操作
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- C语言单链表,双向链表,循环单链表,循环双链表的基本操作
- 双向循环链表的基本操作
- 双向循环链表的头插尾插中间插基本操作
- 双向循环链表基本操作
- 双向循环链表基本操作(C语言)
- 双向循环链表的基本操作
- 双向链表的基本操作