C语言数据结构实验代码如下:
//单链表基本操作的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct LNode* next;
}Node;
//定义链表长度的计数器
int length = 0;
//默认链表的首元节点为空
Node* Head = NULL;
//创建一个新节点
Node* CreatNode(Node* num) {
Node* node = NULL;
node = (Node*)malloc(sizeof(Node));//先创建节点后分配空间
//判断是否成功分配空间
if (node == NULL) {
printf("节点创建有误\n");
return;
}
node->data = num;
node->next = NULL;
return node;
}
//头插法创建单链表
void CreatListFromHead() {
printf("请输入元素:");
//默认输入-1为单链表结束的标志
int temp;
scanf("%d", &temp);
Node* f = CreatNode(temp);
Head = f;
//判断单链表是否输入结束
while (temp != -1) {
Node* n = CreatNode(temp);
n->next = Head->next;
Head->next = n;
scanf("%d", &temp);
length++;//更新链表长度
}
}
//尾插法创建的单链表
void CreatListFromTail() {
printf("请输入元素:");
//默认输入-1为单链表结束的标志
int temp;
scanf("%d", &temp);
//定义一个指针变量
Node* f = CreatNode(temp);
Head = f;
//判断单链表是否输入结束
while (temp != -1) {
Node* n = CreatNode(temp);
f->next = n;
f = n;
scanf("%d", &temp);
length++;//更新链表长度
}
}
//获取链表的长度
int LengthList() {
printf("单链表的长度为:%d\n", length);
}
//打印链表内容
void PrintList() {
printf("当前单链表为:");
//定义一个指针变量
Node* p = Head;
//判断有否有下一个结点
while (p->next != NULL) {
p = p->next;
printf("%d ", p->data);
}
printf("\n");
}
//向单链表中指定位置处插入元素
void InsertList() {
printf("请输入所插入元素的位置:");
int postion = -1;//位置的默认值为-1
scanf("%d", &postion);
int num;
printf("请输入所插入元素值:");
scanf("%d", &num);
int index = postion - 1;//获取元素的索引值
//判断输入索引值是否越界
if (index<0 || index>length) {
printf("输入位置不合法\n");
return;
}
Node* node = CreatNode(num);
//定义一个遍历链表的计数器
int i = 0;
//定义一个指针变量
Node* p = Head;
while (i <= index) {
if (i == index) {
node->next = p->next;
p->next = node;
}
i++;//更新计数器
p = p->next;//更新指针变量
}
length++;//更新链表长度
}
//删除单链表中指定位置处的元素
void DeleteList() {
printf("请输入所删除元素的位置:");
int postion = -1;//位置的默认值为-1
scanf("%d", &postion);
int index = postion - 1;//获取元素的索引值
//判断输入索引值是否越界
if (index<0 || index>length) {
printf("输入位置不合法\n");
return;
}
//定义一个遍历链表的计数器
int i = 0;
//定义一个指针变量
Node* p = Head;
while (i <= index) {
if (i == index) {
Node* temp = p->next;//所删除元素的节点
p->next = temp->next;
free(temp);//释放删除节点的空间
}
i++;//更新计数器
p = p->next;//更新指针变量
}
length--;//更新链表长度
}
//查找指定元素在单链表中的位置
void LocateElemList() {
printf("请输入所要查找的元素值:");
int num;
scanf("%d", &num);
//定义一个指针变量
Node* p = Head->next;
//定义一个遍历链表的计数器
int i = 0;
for (; p->data = num; i++) {
//判断链表是否结束
if (i > length) {
printf("未找到该元素\n");
return;
}
i++;//更新计数器
p = p->next;//更新指针变量
}
printf("%d 在单链表中的位置为:%d\n", num, i + 1);//返回真实位置
}
//获取单链表中指定位置处的元素
void GetElemList() {
printf("请输入所查询元素的位置:");
int postion = -1;//位置的默认值为-1
scanf("%d", &postion);
int index = postion - 1;//获取元素的索引值
//判断输入索引值是否越界
if (index<0 || index>length) {
printf("输入位置不合法\n");
return;
}
//定义一个指针变量
Node* p = Head->next;
//定义一个遍历链表的计数器
int i = 0;
while (i <= index) {
if (i == index) {
printf("%d 位置处的元素为:%d\n", index + 1, p->data);
return;
}
i++;//更新计数器
p = p->next;//更新指针变量
}
}
//销毁单链表
void FreeList() {
//定义一个指针变量
Node* p = Head;
while (p->next != NULL) {
//定义一个中间指针变量,用来保存所释放节点的地址
Node* temp = p;
p = p->next;
free(temp);
}
}
//总菜单
void menu() {
printf("------------单链表基本操作的实现------------\n");
printf("1.头插法创建单链表\n");
printf("2.尾插法创建单链表\n");
printf("3.退出菜单\n");
printf("请输入你所选择的操作数:");
int i = 0;
while (1) {
scanf("%d", &i);
switch (i) {
case 1:
CreatListFromHead();
PrintList();
break;
case 2:
CreatListFromTail();
PrintList();
break;
case 3:
printf("--------------------------------------------");
return;
default:
printf("输入的操作数有误,请重新输入:");
}
if (i == 1 || i == 2) {
break;
}
}
while (1) {
printf("\n");
printf("1.获取所创建链表的长度\n");
printf("2.向单链表中指定位置处插入元素\n");
printf("3.删除单链表中指定位置处的元素\n");
printf("4.查找指定元素在单链表中的位置\n");
printf("5.获取单链表中指定位置处的元素\n");
printf("6.销毁顺序表并退出\n");
printf("请输入你所选择的操作数:");
scanf("%d", &i);
switch (i) {
case 1:
PrintList();
LengthList();
break;
case 2:
InsertList();
PrintList();
break;
case 3:
DeleteList();
PrintList();
break;
case 4:
LocateElemList();
break;
case 5:
GetElemList();
break;
case 6:
FreeList();
printf("--------------------------------------------");
return;
default:
printf("输入的操作数有误,请重新输入:");
scanf("%d", &i);
}
}
}
//菜单运行
int main() {
menu();
}
ps.陕理工22级数据结构第一次实验记录