实验一 线性表基本操作和简单程序
1. 实验目的
一、实验目的与基本要求
- 掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。
- 了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。
- 掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。
- 掌握codeblock上机调试程序的基本方法及C语言编程。
二.实验内容
- 认真阅读和掌握和本实验相关的教材内容及所给的两个程序代码。
- 建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
- 建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。
- 用顺序表和链表分别设计输入一组数据(4,6,9,0,2,-25,14,3,-29),测试程序的如下功能:根据输入的数据,找到相应的存储单元并删除,并显示表中所有的数据,例如输入数据3,如果存在所在的数据中,删除,输出删除后的这组数据,否则,直接输出。
#include <bits/stdc++.h>
using namespace std;
struct node {
int data;
node *next;
};
node *LinkedListInit() {
node *L;
L = new node;
if(L == NULL) {
printf("申请内存空间失败\n");
}
L->next = NULL;
return L;
}
node *LinkedListCreatH() {
node *L;
L = new node;
L->next = NULL;
int x;
while(scanf("%d",&x) != EOF) {
node *p;
p=new node;
p->data = x;
p->next = L->next;
L->next = p;
}
return L;
}
node *LinkedListInsert(node *L,int i,int x) {
node *pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi < i; tempi++) {
pre = pre->next;
}
node *p;
p = new node;
p->data = x;
p->next = pre->next;
pre->next = p;
return L;
}
node *LinkedListDelete(node *L,int x)
{
node *p,*pre;
p = L->next;
while(p->data != x) {
pre = p;
p = p->next;
}
if(x==L->next->data){
L->next=L->next->next;
}
else{
pre->next = p->next;
}
return L;
}
int main() {
node *list,*start;
printf("请输入单链表的数据:");
list = LinkedListCreatH();
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
int i;
int x;
printf("\n");
printf("请输入要删除的元素的值:");
scanf("%d",&x);
LinkedListDelete(list,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
return 0;
}
该实验旨在掌握数据结构中的基本概念,理解逻辑结构与存储结构的区别,以及顺序表和链表的插入、删除、查找等操作。通过CodeBlock进行C语言编程实践,包括初始化、输出、定位、插入和删除等链表操作,并测试在一组特定数据上的功能,如删除特定元素并显示结果。

7182

被折叠的 条评论
为什么被折叠?



