It has been 494 days since the last update, the content of the article may be outdated.
C语言双向链表
爱吃窝窝头
#include<stdio.h> #include<stdlib.h>
typedef struct dlink{ int data; struct dlink *prior,*next; }dlink;
dlink *L;
void initlink() { L=(dlink *)malloc(sizeof(dlink)); L->next=NULL; L->prior=NULL; }
void creatlink(int n){ dlink *p; initlink(); int i; for(i=1;i<=n;i++){ p=(dlink*)malloc(sizeof(dlink)); scanf("%d",&p->data); p->next=L->next; L->next=p; p->prior=L; L->next->prior=p; } }
void output(){ dlink *p; p=L->next; while(p) { printf("%d ",p->data); p=p->next; } }
void insertlink(int i,int e){ dlink *p,*s; p=L; int j=0; while(j<i-1&&p){ p=p->next; j++; } if(j>i-1||!p) { printf("插入位置不存在:\n"); exit(0); } s=(dlink *)malloc(sizeof(dlink)); s->data=e; s->next=p->next; s->prior=p; p->next=s; p->next->prior=s; }
int dellink(int i){ dlink *p,*q; int j,e; p=L; j=0; while(j<i-1&&p->next){ p=p->next; j++; } if(j>i-1||!p->next) { printf("插入位置不存在:\n"); exit(0); } q=p->next; e=q->data; p->next=q->next; q->next->prior=p; free(q); return e; } void main(){ int n,i,e,x; initlink(); printf("请输入像创建的元素个数:"); scanf("%d",&n); printf("请输入元素:"); creatlink(n); printf("输出结果为:"); output(); printf("\n输入插入位置:"); scanf("%d",&i); printf("输入插入的值:"); scanf("%d",&e); insertlink(i,e); printf("输出插入后的链表:"); output(); printf("\n请输入删除的值位置:"); scanf("%d",&x); printf("返回删除的值:"); printf("%d",dellink(x)); printf("\n返回删除后的链表:"); output(); }
|