双链表(C语言版)
#include <stdio.h>
/*******表的定义如下**********/
typedef struct dnote
{
int data;
struct dnote *prior;
struct dnote *next;
} dlklist;
typedef struct dnote
{
int data;
struct dnote *prior;
struct dnote *next;
} dlklist;
dlklist* initiate_dlklist(void);
dlklist* create_dlklist(dlklist *head);
dlklist* find_dlklist(dlklist *head, int input);
dlklist* insert_dlklist(dlklist *head, int i, int x);
dlklist* delete_dlklist(dlklist *head, int i);
dlklist* create_dlklist(dlklist *head);
dlklist* find_dlklist(dlklist *head, int input);
dlklist* insert_dlklist(dlklist *head, int i, int x);
dlklist* delete_dlklist(dlklist *head, int i);
int main (void)
{
dlklist *head, *p;
int input, count;
head = initiate_dlklist();
printf("请输入一些数字(0结束):");
head = create_dlklist(head);
print_dlklist(head);
printf("请输入要查找的序号:");
scanf("%d", &count);
p = find_dlklist(head, count);
printf("第%d号的值为%d/n", count, *p);
printf("请输入要查找的值:");
scanf("%d", &input);
count = locate_dlklist(head, input);
printf("该值的位置是%d/n", count);
printf("请输入要插入的位置和数字:");
scanf("%d %d", &count, &input);
head = insert_dlklist(head, count, input);
print_dlklist(head);
printf("请输入要删除的位置:");
scanf("%d", &input);
head = delete_dlklist(head, input);
print_dlklist(head);
count = length_dlklist(head);
printf("带头节点的双链表的表长为%d/n", count);
return 0;
}
{
dlklist *head, *p;
int input, count;
head = initiate_dlklist();
printf("请输入一些数字(0结束):");
head = create_dlklist(head);
print_dlklist(head);
printf("请输入要查找的序号:");
scanf("%d", &count);
p = find_dlklist(head, count);
printf("第%d号的值为%d/n", count, *p);
printf("请输入要查找的值:");
scanf("%d", &input);
count = locate_dlklist(head, input);
printf("该值的位置是%d/n", count);
printf("请输入要插入的位置和数字:");
scanf("%d %d", &count, &input);
head = insert_dlklist(head, count, input);
print_dlklist(head);
printf("请输入要删除的位置:");
scanf("%d", &input);
head = delete_dlklist(head, input);
print_dlklist(head);
count = length_dlklist(head);
printf("带头节点的双链表的表长为%d/n", count);
return 0;
}
/***********初始化运算*************/
dlklist* initiate_dlklist (void)
{
dlklist *head;
head = (dlklist *) malloc (sizeof(dlklist));
return (head);
}
dlklist* initiate_dlklist (void)
{
dlklist *head;
head = (dlklist *) malloc (sizeof(dlklist));
return (head);
}
/************创建表运算***************/
dlklist* create_dlklist (dlklist *head)
{
dlklist *new, *end;
int x;
end = head;
scanf("%d", &x);
while (x != 0)
{
new = (dlklist *) malloc (sizeof(dlklist));
end -> next = new;
new -> prior = end;
new -> data = x;
end = new;
scanf("%d", &x);
}
head -> prior = end;
end -> next = head;
return (head);
}
dlklist* create_dlklist (dlklist *head)
{
dlklist *new, *end;
int x;
end = head;
scanf("%d", &x);
while (x != 0)
{
new = (dlklist *) malloc (sizeof(dlklist));
end -> next = new;
new -> prior = end;
new -> data = x;
end = new;
scanf("%d", &x);
}
head -> prior = end;
end -> next = head;
return (head);
}
/**********显示列表运算************/
int print_dlklist (dlklist *head)
{
dlklist *p;
int j = 1;
p = head;
printf("/n从前向后输出表是:/n");
p = p -> next;
do
{
printf("(%d):", j);
j++;
printf("%d ", p -> data);
p = p -> next;
}
while (p != head);
int print_dlklist (dlklist *head)
{
dlklist *p;
int j = 1;
p = head;
printf("/n从前向后输出表是:/n");
p = p -> next;
do
{
printf("(%d):", j);
j++;
printf("%d ", p -> data);
p = p -> next;
}
while (p != head);
p = head;
p = p -> prior;
printf("/n从后向前的输出表是:/n");
do
{
j--;
printf("(%d):", j);
printf("%d ", p -> data);
p = p -> prior;
}
while (p != head);
printf("/n/n");
}
p = p -> prior;
printf("/n从后向前的输出表是:/n");
do
{
j--;
printf("(%d):", j);
printf("%d ", p -> data);
p = p -> prior;
}
while (p != head);
printf("/n/n");
}
/************查找运算(读表元)***************/
dlklist* find_dlklist (dlklist *head, int i)
{
dlklist *p;
int j = 0;
p = head;
while ((p -> next != head) && (j < i))
{
p = p -> next;
j++;
}
if (i == j)
return (p);
else
{
printf("该位置不存在!/n");
return 0;
}
}
dlklist* find_dlklist (dlklist *head, int i)
{
dlklist *p;
int j = 0;
p = head;
while ((p -> next != head) && (j < i))
{
p = p -> next;
j++;
}
if (i == j)
return (p);
else
{
printf("该位置不存在!/n");
return 0;
}
}
/*************定位运算(按值查找)***********/
int locate_dlklist (dlklist *head, int x)
{
dlklist *p;
int j = 0;
p = head;
while ((p -> next != head) && (p -> data != x))
{
p = p -> next;
j++;
}
if (p -> data == x)
return (j);
else
{
printf("/n查无此值!/n");
return 0;
}
}
int locate_dlklist (dlklist *head, int x)
{
dlklist *p;
int j = 0;
p = head;
while ((p -> next != head) && (p -> data != x))
{
p = p -> next;
j++;
}
if (p -> data == x)
return (j);
else
{
printf("/n查无此值!/n");
return 0;
}
}
/*****************插入运算***************************/
dlklist* insert_dlklist (dlklist *head, int i, int x)
{
dlklist *p, *q;
p = find_dlklist(head, i - 1);
if (p == NULL)
{
printf("不存在第%d个位置!/n", i);
return 0;
}
else
{
q = (dlklist *) malloc (sizeof(dlklist));
q -> data = x;
q -> prior = p;
q -> next = p -> next;
p -> next -> prior = q;
p -> next = q;
}
return (head);
}
dlklist* insert_dlklist (dlklist *head, int i, int x)
{
dlklist *p, *q;
p = find_dlklist(head, i - 1);
if (p == NULL)
{
printf("不存在第%d个位置!/n", i);
return 0;
}
else
{
q = (dlklist *) malloc (sizeof(dlklist));
q -> data = x;
q -> prior = p;
q -> next = p -> next;
p -> next -> prior = q;
p -> next = q;
}
return (head);
}
/****************删除运算********************/
dlklist* delete_dlklist (dlklist *head, int i)
{
dlklist *p;
p = find_dlklist(head, i);
if ((p != NULL) && (p -> next != NULL))
{
p -> prior -> next = p -> next;
p -> next -> prior = p -> prior;
free(p);
}
else
{
printf("不存在第%d个位置!/n", i);
return 0;
}
return (head);
}
dlklist* delete_dlklist (dlklist *head, int i)
{
dlklist *p;
p = find_dlklist(head, i);
if ((p != NULL) && (p -> next != NULL))
{
p -> prior -> next = p -> next;
p -> next -> prior = p -> prior;
free(p);
}
else
{
printf("不存在第%d个位置!/n", i);
return 0;
}
return (head);
}
/**************求表长运算****************/
int length_dlklist (dlklist *head)
{
int j = 0;
dlklist *p;
p = head;
while (p -> next != head)
{
p = p -> next;
j++;
}
return (j);
}
int length_dlklist (dlklist *head)
{
int j = 0;
dlklist *p;
p = head;
while (p -> next != head)
{
p = p -> next;
j++;
}
return (j);
}
浙公网安备 33010602011771号