⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 昨天同学叫我帮他写个双向链表的程序 于是就随便写了 个 希望大家多提意见
💻
字号:
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#define true 1 
#define false 0 
typedef int Data; 
typedef struct doublelink dblink; 
struct doublelink{ 
Data data; 
dblink *next; 
dblink *prov; 
Data Length; 
}; 
/*初始化一个双向链表*/ 
dblink *Create(){ 
int data; 
int cnt=0; 
dblink *Head,*ProvNode,*NextNode; 
Head=ProvNode=NextNode=(dblink *)malloc(sizeof(dblink)); 
printf("Enter the Node value:"); 
scanf("%d",&data); 
while(data!=-1){ 
  cnt++; 
  if(cnt==1){ 
   Head->data=data; 
   Head->prov=NULL; 
  }else 
   NextNode->data=data; 
  NextNode->next=(dblink *)malloc(sizeof(dblink)); 
  printf("Enter the Node value:"); 
  scanf("%d",&data); 
  if(data==-1) 
   break; 
  ProvNode=NextNode; 
  NextNode=NextNode->next; 
  NextNode->prov=ProvNode; 
} 
NextNode->next=NULL; 
printf("\nthe NextNode data is:%d\n",NextNode->next); 
Head->Length=cnt; 
return Head; 
} 
/*显示数据*/ 
void Show(dblink *Head){ 
dblink *p; 
if(Head!=NULL){ 
  p=Head; 
  while(p!=NULL){ 
   printf("Node is:%d\n",p->data); 
   p=p->next; 
  } 
} 
} 
/*获取链表的长度*/ 
int GetLength(dblink *GetLink){ 
return GetLink->Length; 
} 
/*添加元素*/ 
void Insert(dblink *Head,int data){ 
int flag=true; 
int cnt=0; 
dblink *CurrNode,*Temp,*SaveNode; 
SaveNode=CurrNode=Temp=(dblink *)malloc(sizeof(dblink)); 
CurrNode=Head; 
Temp->data=data; 
while(CurrNode!=NULL){ 
  if(CurrNode->data>=Temp->data){ 
   cnt++; 
   if(cnt==1){ 
    break; 
   } 
   Temp->next=CurrNode->next; 
   Temp->prov=CurrNode; 
   CurrNode->next->prov=Temp; 
   CurrNode->next=Temp; 
   Head->Length++; 
   flag=false; 
   break; 
  } 
  SaveNode=CurrNode; 
  CurrNode=CurrNode->next; 
} 
if(flag){/*如果插入的元素比前面的都大,那么就把你要差如的元素插入到最后一个节点*/ 
  SaveNode->next=Temp; 
  Temp->prov=SaveNode; 
  Temp->next=NULL; 
  Head->Length++; 
} 
} 
/*删除元素*/ 
int Delete(dblink *Head,int data){ 
int cnt=0,flag=false; 
dblink *CurrNode,*ProvNode; 
ProvNode=CurrNode=(dblink *)malloc(sizeof(dblink)); 
CurrNode=Head; 
while(CurrNode!=NULL){ 
  if(CurrNode->data==data){/*如果找到了这个元素把它删除*/ 
   ProvNode->next=CurrNode->next; 
   CurrNode->next->prov=ProvNode; 
   Head->Length--; 
   flag=true; 
   free(CurrNode); 
   break; 
  } 
  ProvNode=CurrNode; 
  CurrNode=CurrNode->next; 
} 
return flag;//判断删除是否成功 
} 
main(){ 
int value; 
dblink *Head; 
Head=Create(); 
Show(Head); 
printf("Now the Link Length is:%d\n",GetLength(Head)); 
printf("the insert data is:"); 
scanf("%d",&value); 
Insert(Head,value); 
Show(Head); 
printf("Now the Link Length is:%d\n",GetLength(Head)); 
printf("the delete data is:"); 
scanf("%d",&value); 
if(Delete(Head,value)) 
  Show(Head); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -