#ifndef _SLINK_H
#define _SLINK_H
typedef int data_type;
typedef struct dblinknode
{data_type data;
struct dblinknode *pre;
struct dblinknode *next;
}DBLinkNode;
enum res
{MALLOCERROR=-3,
POSSERROR,
DBLINKNULL,
OK
};
enum op
{TAIL = -1,
HEAD
};
//创建
DBLinkNode *create(void);
//插入
int insert(DBLinkNode *pHead,int pos,data_type item);
int delete(DBLinkNode *pHead,int pos,data_type *pData);
int show(DBLinkNode *pHead);
#endif
2.创建函数首先需要创建一个头节点,之后的函数大部分都需要此头节点的地址
专注于为中小企业提供网站设计、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业薛城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。DBLinkNode *create(void)
{DBLinkNode *pHead=NULL;
pHead=(DBLinkNode *)malloc(sizeof(DBLinkNode));
if(pHead==NULL)
{perror("malloc error");
return MALLOCERROR;
}
memset(pHead,0,sizeof(DBLinkNode));
return pHead;
}
3.插入函数分为有插入,尾插入和中间插入
int insert(DBLinkNode *pHead,int pos,data_type item)
{if(pHead==NULL)
{return DBLINKNULL;
}
if(pos<0)
{return POSSERROR;
}
DBLinkNode *pTmp=NULL;
DBLinkNode *pNew=NULL;
pNew=(DBLinkNode *)malloc(sizeof(DBLinkNode));
if(pNew==NULL)
{return MALLOCERROR;
}
memset(pNew,0,sizeof(DBLinkNode));
pNew->data=item;
pTmp=pHead;
int i;
switch(pos - 1)
{case HEAD:
pNew->next=pHead->next;
pNew->pre=pHead;
if(pHead->next!=NULL)
{ pHead->next->pre=pNew;
}
pHead->next=pNew;
break;
case TAIL:
if(pTmp->next==NULL)
{ return DBLINKNULL;
}
while(pTmp->next!=NULL)
{ pTmp=pTmp->next;
}
pTmp->next=pNew;
pNew->pre=pTmp;
break;
default:
for(i=1;i<=pos-1;i++)
{ pTmp=pTmp->next;
}
pNew->next=pTmp->next;
pNew->pre=pTmp;
if(pTmp->next!=NULL)
{ pTmp->next->pre=pNew;
}
pTmp->next=pNew;
}
return OK;
}
4.删除函数删除也分为头删除,尾删除,中间删除
int delete(DBLinkNode *pHead,int pos,data_type *pData)
{if(pHead==NULL)
{return DBLINKNULL;
}
if(pos<0)
{return POSSERROR;
}
DBLinkNode *pTmp=NULL;
DBLinkNode *pDel=NULL;
pTmp=pHead;
pDel=pHead->next;
int i=1;
switch(pos-1)
{case HEAD:
*pData=pDel->data;
pDel->next->pre=pTmp;
pHead->next=pDel->next;
free(pDel);
pDel=NULL;
break;
case TAIL:
if(pDel==NULL)
{ return DBLINKNULL;
}
while(pDel->next!=NULL)
{ pTmp=pDel;
pDel=pDel->next;
}
*pData=pDel->data;
pTmp->next=NULL;
pDel->pre=NULL;
free(pDel);
pDel=NULL;
break;
default:
while((i<=pos-1)&&(pDel!=NULL))
{pTmp=pDel;
pDel=pDel->next;
i++;
}
if(pDel==NULL)
{return DBLINKNULL;
}
*pData=pDel->data;
pDel->next->pre=pTmp;
pTmp->next=pDel->next;
free(pDel);
pDel=NULL;
}
5.展示函数传入头节点,遍历打印取出节点数据域中的值
int show(DBLinkNode *pHead)
{if(pHead==NULL)
{return DBLINKNULL;
}
DBLinkNode *pTmp=NULL;
pTmp=pHead->next;
while(pTmp->next!=NULL)
{printf("%d ",pTmp->data);
pTmp=pTmp->next;
}
printf("%-5d",pTmp->data);
return OK;
}
6.主函数#include#include#include#include"../include/slink.h"
void menu(void)
{printf("1.......insert\n");
printf("2.......show\n");
printf("3.......delete\n");
printf("4........update\n");
printf("-1........exit\n");
}
int main(void)
{DBLinkNode *pHead=NULL;
pHead=create();
int pos=0;
int op=0;
int ret=0;
data_type item;
while(1)
{menu();
printf("请输入选项:\n");
scanf("%d",&op);
if(op==-1)
{ break;
}
switch(op)
{case 1:
printf("请输入要插入的位置和元素:\n");
scanf("%d%d",&pos,&item);
ret=insert(pHead,pos,item);
if(ret==OK)
{ printf("插入成功\n");
}
if(ret==POSSERROR)
{ printf("插入位置错误\n");
}
break;
case 2:
show(pHead);
break;
case 3:
printf("请输入要删除的位置:\n");
scanf("%d",&pos);
ret=delete(pHead,pos,&item);
printf("删除的元素是:%d",item);
break;
case 4:
break;
case 6:
break;
}
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款