青 岛 理 工 大 学
课程实验报告
课程名称 | 数据结构 | 班级 | 计算083班 | 实验日期 | |
姓名 | 学号 | 实验成绩 | |||
实验名称 | 线性表的应用 | ||||
实验目的及其要求 | 1. 熟悉C语言的上机环境,掌握C语言的基本结构。 2. 会定义线性表的顺序存储结构。 3. 熟悉对顺序表的一些基本操作和具体的函数定义 | ||||
实验环境 | Microsoft Visual C++ 6.0 | ||||
实 验 内 容 | 该程序的功能是对元素类型为整型的顺序表进行一些操作。该程序包括顺序表结构类型的定义以及对顺序表操作的具体的函数定义和主函数。 /* 定义DataType为int类型 */ typedef int ElemType; /*顺序表存储空间的总分配量*/ #define MAXSIZE 100 /* 顺序存储类型 */ typedef struct {Elem data[MAXSIZE]; /*存放线性表的数组*/ int length; /* length是顺序表的长度*/ }SeqList; /* 初始化顺序表 */ SeqList SeqListInit( ) * 检查顺序表是否为空 */ int ListEmpty(SeqList L) /* 遍历顺序表 */ void ListTraverse(SeqList L) /* 从顺序表中查元素 */ DataType ListGet(SeqList L ,int i) /* 向顺序表中插入元素 */ void ListInsert(SeqList L,int i,DataType x) /* 从顺序表中删除元素 */ void ListDelete(SeqList L,int i) | ||||
算法描述及实验步骤 | 1. 定义顺序表的分配空间; 2. 定义存放线性表的数组; 3. 初始化顺序表; 4. 输入结点建立顺序表; 5. 在顺序表中插入结点; 6. 在顺序表中删除结点; 7. 结束程序。 | ||||
调 试 过 程 及 实 验 结 果 | 输入节点数,和每个节点的值: 在2位置插入节点5: 删除位置2 的节点: | ||||
总结 | 1. 顺序表是数据结构中比较常用的存储结构要熟练掌握; 2. 顺序表中有插入、删除等操作,所以开始分配初始空间要足够大。 | ||||
附 录 | #include<stdio.h> #include<stdlib.h> #define max_list_size 100//定义给顺序表分配空间大小 typedef struct{ int *elem; int length; }list_node;//指向顺序表首地址的结构体单元 list_node L;//这里使用了全局变量,意思是在所有的函数里可以随意修改其值 int list[max_list_size]; void init(); void doli(); void over(); void creat(); void insert(); void delete(); void display(); int main() {//将函数分三个部分:初始化,主体部分,结尾 init();//初始化 doli();//主体 over();//结尾 system("PAUSE"); } void init() {//初始化操作主要的任务是分配空间 L.elem = (int *) malloc (max_list_ size * sizeof(int) );// if (! L.elem) { printf("the memory is full"); exit(1); } L.length = 0; } void doli() { creat();//建表部分 display();//显示部分 insert();//插入元素部分 display(); delete();//删除元素部分 display(); system("PAUSE"); } c语言listinsert函数//*************以下为建表部分****************** void creat(){ int a, b, i; printf("请输入结点数:\n"); scanf("%d", &a); if( a > max_list_size - 1 || a < 0 ) { printf("分配失败!\n"); exit(1); } for( i = 0; i != a; ++i) { printf("请输入第%d结点的值:\n", i); scanf("%d", &b); L.elem[i] = b; ++L.length; } } | //*************以下为插入元素部分******************* void insert(){ int a, b, i; int *p, *q; printf("请输入插入结点的值:\n"); scanf("%d", &a); printf("请输入插入结点的位置:\n"); scanf("%d", &b); if(b < 1 || b > L.length+1) exit(1); q = &(L.elem[b - 1]); for(p = &(L.elem[L.length - 1]); p >= q; --p) *(p+1) = *p; *q = a; ++L.length; } //*************以下为删除元素部分********************* void delete(){ int i, a, b; int *p, *q; printf("请输入删除的位置:\n"); scanf("%d", &a); if( a < 1 || a > L.length ) { printf("删除位置错误!"); exit(1); } p = &(L.elem[a-1]); b = *p; q = L.elem + L.length - 1; for(++p; p <= q; ++p) *(p-1) = *p; --L.length; } //****************以下为显示部分********************** void display(){ int a, b, i; for( i = 1; i <= L.length; ++i) printf("%d\t", L.elem[i-1]); } //*****************结束**************** void over() { } |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论