代码打了断点,进入调试模式了,圈出来的位置鼠标左键再点一次下去掉断点,或者按f5继续运行
代码(C语言)链式线性表 Visual Studio 2019
/**
* 数据结构 C语言链式线性表
* @FileName SingleLinkList.c
* @author W.Lionel.Esaka
*/
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
#define Status int;
#define CORRECT 1;
#define ERROR 0;
#define OVERFLOW -1;
/*单链表的类型定义如下*/
typedef struct node{
DataType data;
struct node* next;
} LinkNode, * LinkList;
/*创建指定长度单链表 尾插法*/
void CreateListTail(LinkList* list, int Number)
{
LinkList node, r;
int i;
srand(time(0));
*list = (LinkList*)malloc(sizeof(LinkList));
r = *list;
for (i = 0; i < Number; i++)
{
node = (LinkNode*)malloc(sizeof(LinkNode));
node->data = rand() % 100 + 1;
r->next = node;
r = node;
}
r->next = NULL;
}
/* 插入元素 */
Status InsertLinkList(LinkList* list, int position, DataType value)
{
int i = 1;
LinkList p, s;
p = *list;
while (p && i < position)
{
p = p->next;
i++;
}
if ( !p || i > position)
{
return ERROR;
}
s = (LinkList)malloc(sizeof(LinkNode));
s->data = value;
s->next = p->next;
p->next = s;
return CORRECT;
}
/*删除元素 */
Status DeleteLinkList(LinkList* list, int position, DataType* value)
{
int i = 1;
LinkList p, q;
p = *list;
while (p->next && i < position)
{
p = p->next;
i++;
}
if (!(p->next) || i > position)
{
return ERROR;
}
q = p->next;
p->next = q->next;
*value = q->data;
free(q);
return CORRECT;
}
/*打印链表数据*/
void DisPlayList(LinkList* list)
{
LinkList p;
p = *list;
int i = 0;
printf("\n链表数据如下:\n");
while (p->next != NULL)
{
p = p->next;
printf("%d,\t", p->data);
i++;
if (i%10 == 0) printf("\n");
}
printf("\n链表长度为%d\n", i);
}
/*
将一个带头结点的单链表 A 分解为两个具有相同结构的链表 B 和C。
其中 B 表中的结点为 A 表中值为奇数的结点,而 C 表中的结点为 A 表中值为偶数的结点。
*/
void func(LinkList* A, LinkList* B, LinkList* C)
{
LinkList p1;
p1 = *A;
while (p1->next != NULL)
{
p1 = p1->next;
if ( odd(p1->data) )
{
InsertLinkList(B, 1, p1->data);
}
else
{
InsertLinkList(C, 1, p1->data);
}
}
}
/*清空链表*/
Status ClearList(LinkList* list)
{
LinkList p, q;
p = (*list)->next;
while (p)
{
q = p->next;
free(p);
p = q;
}
(*list)->next = NULL;
return CORRECT;
}
/*odd(x) 为判奇数函数,x 为奇数,返回 1,否则返回 0。*/
int odd(int x)
{
if (x & 1)
{
return 1;
}
else
{
return 0;
}
}
/*入口 演示main*/
void main()
{
LinkList linklistA, linklistB, linklistC;
LinkList* listA = &linklistA;
LinkList* listB = &linklistB;
LinkList* listC = &linklistC;
int value = 0;
CreateListTail(listA, 20);
printf("单链表LinkListA");
DisPlayList(listA);
printf("\n将一个带头结点的单链表 A 分解为两个具有相同结构的链表 B 和 C \n");
printf("其中 B 表中的结点为 A 表中值为奇数的结点,而 C 表中的结点为 A 表中值为偶数的结点\n");
CreateListTail(listB, 0);
CreateListTail(listC, 0);
func(listA,listB,listC);
printf("单链表LinkListB");
DisPlayList(listB);
printf("\n");
printf("单链表LinkListC");
DisPlayList(listC);
}