BEI-TIAN-XUAN 2021-05-30 00:45 采纳率: 66.7%
浏览 148
已采纳

VS2019 ——单链表操作.exe 已触发了一个断点问题

断点如下:

全部代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<stdbool.h>
typedef char ElemType;
typedef struct node
{
	ElemType data;
	struct node* next;
}Node, LinkList;
void Show_meau()   //菜单
{
	printf("**********************************\n");
	printf("            WELCOME!\n");
	printf("\n");
	printf("\t单链表的基本操作\n\n");
	printf("  \t 1.查询\t 2.插入\n\n");
	printf("  \t 3.删除\t 4.打印\n\n");
	printf("  \t 5.计数\t 6.销毁\n\n");
	printf("  \t 7.退出\t 8.建表\n\n");
	printf("\n");
	printf("     输入相关序号实现相关功能!\n");
	printf("**********************************\n");
}
void InitList(LinkList* L)
{
	L = (LinkList*)malloc(sizeof(Node));
	L->next = NULL;
}
void Create_List(LinkList* L)   //尾插法
{
	ElemType c;
	Node* r, * s;
	bool flag=true;
	r = L;
	printf("提示:输入$表示建表结束!\n");
	while (flag==true)
	{
		c = getchar();
		if (c != '$')
		{
			s = (LinkList*)malloc(sizeof(Node));
			s->data = c;
			r->next = s;
			r = s;
		}
		else
		{
			flag = false;
			r->next = NULL;
		}
	}
	printf("建表完成!\a");
	Sleep(2000);
}
void Search(LinkList* L)
{
	int flag=1;
	Node* p;
	ElemType e;
	getchar();   //吸收换行符
	p = L->next;
	printf("请输入要查找的值:");
	e = getchar();
	while (p != NULL)
	{
		if (p->data != e)
			p = p->next;
		else
		{
			printf("该地址为:%p\n", p);
			printf("输入0退出!\n");
			scanf("%d", &flag);
			break;
		}
	}
	if (flag == 0)
		return;
	printf("查无此值!\a");
	Sleep(2000);
}
void DispList(LinkList* L)
{
	int n;
	LinkList* p = L->next;
	printf("打印值为:\n");
	while (p != NULL)
	{
		printf("%c", p->data);
		p = p->next;
	}
	printf("\n\n");
	while (1) {
		printf("输入0退出打印!\n");
		scanf("%d", &n);
		if (n == 0)
			return;
		else
			printf("输入无效,请重新输入!\n");
	}
}
int ListLength(LinkList *L)
{
	int n = 0;
	LinkList* p = L;
	while (p->next != NULL)
	{
		n++;
		p=p->next;
	}
	n--;
	return n;
}
void Print_Length(LinkList* L)
{
	int n = 1;
		while (1)
		{
			if (n == 1)
			{
				printf("表长为:%d\n", ListLength(L));
				printf("输入0退出打印!\n");
				scanf("%d", &n);
			}
			if (n == 0)
				return;
		}
}
void ListInsert(LinkList* L)
{
	int i,j=0;
	ElemType e;
	LinkList* p = L, * s;
	printf("当前表长为:%d\n", ListLength(L));  //注意指针L
	while (1)
	{
		printf("请输入插入的位置:");
		scanf("%d", &i);
		if (i <= 0 || i > ListLength(L))
		{
			printf("输入错误!请重新输入!\n");
		}
		else
			break;
	}
	getchar();
	printf("请输入插入的值:");
	scanf("%c", &e);
	while (j < i  && p != NULL)
	{
		j++;
		p = p->next;
	}
	if (p == NULL)
	{
		printf("查无此值!\n");
		Sleep(2000);
		return;
	}
	else
	{
		s = (LinkList*)malloc(sizeof(Node));
		s->data = e;
		s->next = p->next;
		p->next = s;
		printf("插入成功!\a");
		Sleep(2000);
	}
}
void ListDelete(LinkList* L)
{
	int i, j = 0;
	ElemType e;
	LinkList* p = L, * q;
	printf("当前表长为:%d\n", ListLength(L));  //注意指针L
	while (1)
	{
		printf("请输入删除值的位置:");
		scanf("%d", &i);
		if (i <= 0 || i > ListLength(L))
		{
			printf("输入错误!请重新输入!\n");
		}
		else
			break;
	}
	getchar();
	while (j < i && p != NULL)
	{
		j++;
		p = p->next;
	}
	if (p == NULL)
	{
		printf("查无此值!\n");
		Sleep(2000);
		return;
	}
	else
	{
		q = p->next;
		if (p == NULL)
		{
			printf("查无此值!\n");
			Sleep(2000);
			return;
		}
		e = q->data;
		p->next = q->next;
		free(q);
		printf("删除成功!\a");
		Sleep(2000);
	}
}
void DestroyList(LinkList* L)
{
	LinkList* pre = L, * p = L->next;
	while (p != NULL)   //逐一释放
	{
		free(pre);
		pre = p;
		p = pre->next;
	}
	free(pre);
	printf("销毁成功!\a");
	Sleep(2000);
}
int main()
{
	int n;
	LinkList L;
	InitList(&L);
	while (1) {
		system("cls");    //清屏函数
		Show_meau();
		printf("请输入1-8的数:");
		scanf("%d", &n);
		switch (n) {
		case 1:
			Search(&L);
			break;
		case 2:
			ListInsert(&L);
			break;
		case 3:
			ListDelete(&L);
			break;
		case 4:
			DispList(&L);
			break;
		case 5:
			Print_Length(&L);
    		break;
		case 6:
			DestroyList(&L);
			break;
		case 7:
			printf("........正在退出中........");
			Sleep(3000);
			system("cls");
			printf("\a退出成功!"),
				exit(0);
			break;
		case 8:
			Create_List(&L);
			break;
		default:
			printf("\a输入错误!请重新输入(1—8)!"),
				Sleep(2000);
			break;
		}
	}
	return 0;
}
  • 写回答

1条回答 默认 最新

  • BEI-TIAN-XUAN 2021-05-30 19:49
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 关于#stm32#的问题,请各位专家解答!(语言-c语言)
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥15 关于#单片机#的问题,请各位专家解答!
  • ¥20 需要完整的共散射点成像代码
  • ¥15 编写vba代码实现数据录入工作
  • ¥15 做过TCL海信电视小米电视相关影视会员软件私我
  • ¥15 Mapreduce是正常的,在运行其他jar包时并没有任何问题,只是在做LogCount.jar 时出的问题。如图所示