#include<stdio.h>
#include<malloc.h>
typedef int DataType;
typedef struct Dunode {
DataType data;
struct Dunode* next;
struct Dunode* prior;
}DuLinklist;
DuLinklist* InitList() {
DuLinklist* head;
head = (DuLinklist*)malloc(sizeof(DuLinklist));
head->next = NULL;
head->prior = NULL;
return head;
}
void CreateListL(DuLinklist* head, int n) {
DuLinklist* s, * last;
last= head;
int i;
printf("请输入%d个整数:", n);
for (i = 0; i < n; i++) {
s= (DuLinklist*)malloc(sizeof(DuLinklist));
scanf("%d", &s->data);
s->next = NULL;
last->next = s;
s->prior = last;
last = s;
}
printf("建表成功!");
}
void Displist(DuLinklist* head) {
DuLinklist* p;
p = head->next;
while (p != NULL) {
printf("%5d", p->data);
p = p->next;
}
}
void Inselem(DuLinklist* head,int n, DataType x) {
DuLinklist* s, * p;
p = head;
int count = 0;
s = (DuLinklist*)malloc(sizeof(DuLinklist));
s->data = x;
while (count < n - 1 && p != NULL) {
p = p->next;
count++;
}
s->next = p->next;
if (p->next != NULL)
p->next->prior = s;
p->next = s;
s->prior = p;
printf("插入成功\n");
}
void Delelem(DuLinklist* head, int n,DataType * x) {
int i = 0;
DuLinklist* s,*p;
p = head;
s = (DuLinklist*)malloc(sizeof(DuLinklist));
*x = s->data;
s = p->next;
while (i < n - 1 && p != NULL) {
p = p->next;
i++;
}
p->next = s->next;
s->next->prior = p;
free(s);
printf("删除成功!");
}
int main() {
DuLinklist* head;
DataType x;
int n;
head=InitList();//初始化
printf("初始化成功!");
printf("请输入建立链表的个数:");
scanf("%d", &n);
CreateListL(head, n);//尾插法建立链表
Displist(head);//建表显示
printf("请输入插入元素的值:");
scanf("%d", &x);
printf("请输入插入元素的位置:");
scanf("%d", &n);
Inselem(head,n,x);
Displist(head);
printf("请输入删除元素的位置:");
scanf("%d", &n);
Delelem(head,n,&x);
Displist(head);
}
双链表的一些基础操作实现
于 2024-04-07 22:49:36 首次发布