#include"stdio.h"
#include"stdlib.h"
typedef struct Node
{
int data;
Node *prior;//向前
Node *next;//向后
}Node;
typedef struct Point
{
Node *head;//头指针
Node *tail;//尾指针
}Point;
void initial(Point *p)//初始化头结点,双向链表
{
Node *node=(Node*)malloc(sizeof(Node));
p->head=node;
p->tail=node;
node->prior=node;
node->next=node;
}
void add(int e,Point *p)//在链表末尾增加一个节点
{
Node *q=(Node *)malloc(sizeof(Node));
p->tail->next=q;
p->tail->next->data=e;
p->tail->next->next=p->head;
q->prior=p->tail;
p->tail =q;
p->head->prior=p->tail;
}
void delet(int e,Point *p)//删除某个节点
{
int flag=0;
Node *q1=p->head;
Node *q2=q1->next;//指向第一个节点
while(q2!=p->head)
{
if(q2->data==e)
{
q1->next=q2->next;
q2->next->prior=q1;
free(q2);
q2=NULL;
flag=1;
break;
}
else
{
q1=q2;
q2=q2->next;
}
}
if(flag==1)
{
printf("所要删除的节点已经成功被删除!!!\n");
}
else
{
printf("所要删除的节点不存在!!!\n");
}
}
void search(int e,Point *p)//查找某个节点
{
int flag=0;
int count=1;
Node *q1=p->head;
Node *q2=q1->next;//指向第一个节点
while(q2!=p->head)
{
if(q2->data==e)
{
flag=1;
break;
}
else
{
q1=q2;
q2=q2->next;
count++;
}
}
if(flag==1)
{
printf("所要查询的节点是链表中的第%d个节点!\n",count);
}
else
{
printf("所要查询的节点不存在!!!\n");
}
}
void printNode(Point *p)//打印节点数据
{
Node *q;
q=p->head->next;//指向第一个节点
if(p->head==p->tail)
{
printf("此链表为空!!\n");
}
else
{
printf("次链表中的节点数据依次为:\n");
while(q!=p->head)
{
printf("%d ",q->data);
q=q->next;
}
}
}
void operate(Point *p)
{
int num,e;
char c;
void (*pf[3])(int e,Point *p)={add,delet,search};
printf("请选择操作,增加节点请输入 '1',删除节点请输入'2',查询节点请输入 '3':\n");
scanf("%d",&num);
while(1)
{
if(num==1||num==2||num==3)
{
printf("请输入将要操作的数据:");
scanf("%d",&e);
(*pf[num-1])(e,p);
break;
}
else
{
printf("输入错误,请重新输:");
scanf("%d",&num);
}
}
printNode(p);
printf("\n");
while(1)
{
printf("是否继续操作,是则输入'Y', 不是则按其他任意键结束!\n");
fflush(stdin);
scanf("%c",&c);
if(c=='Y')
operate(p);
else
break;
}
}
void main()
{
Point p;
initial(&p);
operate(&p);
}
C语言相关练习题 数组指针链表
5星 · 超过95%的资源 需积分: 33 199 浏览量
2011-08-12
20:30:25
上传
评论 1
收藏 9KB RAR 举报
luoxiaoqunfeitian
- 粉丝: 2
- 资源: 14
最新资源
- Integrated-Energy-Systems-with-CAES-(注释完全,可直接运行)
- PDF为英语文本绘制热区(DEMO)
- 4.22.cpp
- 基于Transformer和Bert的close domain抽取式问答系统构建的智能聊天机器人项目源代码
- 基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(注释完全,可直接运行)(文档加Matlab源码)
- 2023各大软件技术峰会演进资料汇总(PPT),资料难得
- 基于混沌集成决策树的电能质量复合扰动识别(注释完全,可直接运行)(文档加Matlab源码)
- 航空公司如何成功实现数字化转型英文版.rar
- RTL8309N-8口交换机评估板Cadence设计硬件(原理图+PCB)及PDF原理图+RTL8309N技术规格书
- 基于JAVA的打飞机游戏设计(程序).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈