资源简介

实现双向链表的增删改查功能,dos窗口输入输出,可运行,有注释

资源截图

代码片段和文件信息

#include
#include

#define ElemType int

typedef struct DNode{
ElemType data;
struct DNode *prior*next;
}DNode*Dlinklist;

//尾插入法创建链表
Dlinklist CreateList(){
int ix;
Dlinklist L;
DNode *s*r;
L = (Dlinklist)malloc(sizeof(DNode));
L->next = NULL;
L->prior = NULL;
r = L;
int MaxSize;

printf(“输入建立链表结点数:“);
scanf(“%d“&MaxSize);

for(i = 0;i< MaxSize;i++){
printf(“输入第 %d 个结点值:“i+1);
scanf(“%d“&x);
s = (DNode *)malloc(sizeof(DNode));
s->data = x;
r->next = s;
s->prior = r;
s->next = NULL;
r = s;
}
return L;
}

//按序号查找结点
DNode *GetElemBySeq(Dlinklist Lint i){
int j=1;
DNode *p = L->next;
if(i==0)
return (DNode *)L;
if(i<1)
return NULL;
while(p&&j p=p->next;
j++;
}
return p;
}

//按值查找结点
DNode *GetElemByValue(Dlinklist LElemType e){
DNode *p = L->next;
while(p!=NULL && p->data != e)
p = p->next;
return p;
}



//插入节点在第i个位置插入结点
Dlinklist InsertNode(Dlinklist LElemType eint i){
DNode *p*s;
p = GetElemBySeq(Li-1); //查找第i-1个结点
s = (DNode *)malloc(sizeof(DNode));
s->data = e;
if(p->next !=NULL){
s->next = p->next;
p->next->prior = s;
}
else
s->next = NULL;
p->next = s;
s->prior = p;

return L;
}


//删除第i个结点
Dlinklist DeleteNode(Dlinklist L int i){
DNode *p*q;
q = GetElemBySeq(Li); //查找第i个结点为q
p = q->prior;
p->next = q->next;
q->next->prior = p;
free(q);
return L;
}

void PrintList(Dlinklist L){
DNode *p;
p = L->next;
printf(“当前链表为:“);
while(p != NULL){
printf(“  %d“p->data);
p = p->next;
}
printf(“\n“);
}

int menuselect(){
int s;
do{
printf(“请选择具体操作:\n“);
printf(“1.打印链表 \n“);
printf(“2.查询结点 \n“);
printf(“3.插入结点 \n“);
printf(“4.删除结点 \n“);
printf(“5.退出     \n“);
printf(“请选择(1-5):“);
scanf(“%d“&s);
}while(s<1 && s>5);
return s;
}

void main(void){
Dlinklist L;
DNode *p;
L = CreateList();

while(1){
switch(menuselect()){
int i;
ElemType e;
case 1: 
PrintList(L);
break;
case 2:
printf(“请输入查找节点位置:“);
scanf(“%d“&i);
p = GetElemBySeq(Li);
printf(“结点值为:%d“p->data);
printf(“\n“);
break;
case 3:
printf(“请输入要插入节点的位置:“);
scanf(“%d“&i);
printf(“请输入要插入节点的值:“);
scanf(“%d“&e);
InsertNode(Lei);
PrintList(L);
break;
case 4:
printf(“请输入要删除节点的位置:“);
scanf(“%d“&i);
DeleteNode( L  i);
PrintList(L);
break;
case 5:
exit(0);
}
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2717  2014-03-05 11:35  Dlink.cpp

----------- ---------  ---------- -----  ----

                 2717                    1


评论

共有 条评论