资源简介
实现双向链表的增删改查功能,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 Dli
----------- --------- ---------- ----- ----
2717 1
- 上一篇:51单片机 lcd1602测试C程序
- 下一篇:万能apk增加弹窗工具
评论
共有 条评论