当前位置:文档之家› c语言链表大例题

c语言链表大例题

}
printf("插入后:");
showPointLink(*h);
}
POINT *revangePointLink(POINT *h)
{
POINT *p, *q;
printf("逆序前:");
showPointLink(h);
if(h)
{
p = h;
h = h->next;
p->next = NULL;
choose = 0;
else
choose -= '0';
if(choose == 0)
{
printf("\n输入错误!");
printf("\n请重新选择(1-7)");
getch();
}
}
return choose;
}
void showMenu(void)
{
system("cls");
printf("\n\n屏幕上的点点的管理信息系统\n");
printf("请输入一个点的两个坐标");
printf("任意坐标值为0,则表示输入结束\n");
scanf("%d%d", &x, &y); //先从键盘输入一对坐标
while(x && y) //只要有一个为0loc(sizeof(POINT));
void showPointLink(POINT *head);
void showOnePoint(POINT);
void destroyLink(POINT *head);
POINT *searchPrePoint(POINT *head, int x, int y);
int removePoint(POINT **head);
//是POINT,而当前函数相关内容是h,而其类型是POINT *,需要将POINT *
//转换成POINT类型,因此需要对h进行指向运算,以取得其所指向的实例。
printf("\n");
}
POINT *InputPoints(void)
{
int x, y;
POINT *head = NULL, *p, *q;
while(h)
{
q = h;
h = h->next;
q->next = p;
p = q;
}
}
printf("逆序后:");
showPointLink(p);
return p;
}
void sortPointByX(POINT *h)
{
POINT *p, *q, t, *r;
printf("\n排序前的结果是:");
getch();
break;
case REMOVE:
if(removePoint(&Head) == FALSE)
printf("删除的点不存在!");
printf("删除完毕!\nPress any key to continue...");
printf("\n 1)录入信息");
printf("\n 2)显示信息");
printf("\n 3)删除信息");
printf("\n 4)插入信息");
printf("\n 5)排序");
printf("\n 6)逆序");
printf("\n 7)退出");
printf("\n请选择:");
showPointLink(h);
printf("\n");
for(p = h; p; p = p->next)
for(q = p->next; q; q = q->next)
if(p->x > q->x)
{
t = *p;
*p = *q;
*q = t;
r = p->next;
p->next = q->next;
}
void insertPoint(POINT **h)
{
int Newx, Newy, Oldx, Oldy;
POINT *p, *q;
printf("插入前:");
showPointLink(*h);
// 1、确定新点坐标;
printf("请输入新点坐标:");
scanf("%d%d", &Newx, &Newy);
执行1号。*/
scanf("%d%d", &x, &y); //从键盘输入一对坐标
}
return head;//从前面的描述中可知,若head指向第一个节点,则
//返回该节点的首地址,就等于返回链表首地址;若一开始输入的
//数据中包含0,则head的初始值为NULL,此时返回值为NULL。
}
void main(void)
3、上述条件都不满足:成功的返回了要找节点的前驱节点。
*/
}
void destroyLink(POINT *h)
{
POINT *p;
while(h)
{
p = h; //让p指向h所指向的节点;
h = h->next; //让h向后移动;
free(p); //释放p所指向的节点;
}
}
void showOnePoint(POINT node)
printf("祝您身体健康!\n按任意键继续...\n");
getch();
printf("谢谢使用!\n按任意键继续...\n");
getch();
printf("不送了!\n按任意键继续...\n");
getch();
printf("请您走好!\n按任意键继续...\n");
getch();
printf("不要忘了我哦!!!\n按任意键继续...\n");
p = (POINT *)malloc(sizeof(POINT));
p->x = Newx;
p->y = Newy;
p->next = NULL;
// 2、确定插入点坐标;
printf("再输入插入点坐标:");
scanf("%d%d", &Oldx, &Oldy);
//3、查找插入点的前驱节点;
2、查找该点的前驱节点;
3、删除该点。*/
int x, y, Ok = TRUE;
POINT *p, *q;
//1、输入要删除的点的坐标;
printf("\n\n\n这是删除功能\n原有点坐标如下:\n");
showPointLink(*h);
printf("\n请输入要删除的点的坐标:");
scanf("%d%d", &x, &y);
{
POINT *Head = NULL;
int choice = 0;
while(choice != 7)
{
choice = selectedAction();
system("cls");
switch(choice)
{
case INPUT:
if(Head) //表示该链表非空,应该先清空!
destroyLink(Head);
Head = InputPoints();
printf("录入完成!\nPress any key to continue...");
getch();
break;
case SHOW:
showPointLink(Head);
printf("显示完毕!\nPress any key to continue...");
/*由于下面的话,说明q现在正好指向最后一个节点,只要将刚刚申请的,p
所指向的节点链接到最后一个节点的后面,即可完成任务。*/
q = p;//2号
/*q每次都在本轮循环结束之前指向刚刚申请且刚刚链到链表的末尾的那个
新节点(简单地说,q总指向链表的最后一个节点。
上述的1号语句和2号语句的书写顺序与执行顺序不同,总是先执行2号,再
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
#define TRUE 1
#define FALSE 0
#define INPUT 1
#define SHOW 2
#define REMOVE 3
#define INSERT 4
{
printf("<%d, %d> ", node.x, node.y);
}
//showPointLink(Head);
void showPointLink(POINT *h)
{
printf("\n链表的内容如下:\n");
for(; h; h = h->next)
showOnePoint(*h);//此处,函数showOnePoint()需要的参数类型
相关主题