今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h .h文件是头文件 需要引入 具体的功能我都已经在代码中写明了
list.h代码如下:
//线性表的定义在头文件中实现
#ifndef _LIST_H
#define _LIST_H
#define _LIST_INIT_SIZE 10
#define _LIST_INCREME 10
typedef struct
{
ElemType * elem;//首地址
int length;
int size;
}LIST;
LIST *InitList();
void FreeList(LIST *l);
int InsertList(LIST *l,int i,ElemType *e);
int DeleteList(LIST *l,int i);
#endif
list.c代码如下
#include <stdlib.h>
#include <stdio.h>
#include "stu.h"
#include "list.h"
//线性表的初始化,此时数据存储的大小的内存还未开辟 开辟的是list.h的大小
LIST *InitList()
{
LIST *l=(LIST *)malloc(sizeof(LIST));
//判断开辟是否成功
if(l==NULL)
exit(0);
//开辟存储数据的内存的区域
l->elem=(ElemType *)malloc(_LIST_INIT_SIZE *sizeof(ElemType));
//如果开辟成功的话就释放掉内存
if(l->elem==NULL)
{
free(l);
exit(0);
}
//有效长度赋初值为0
l->length=0;
l->size=_LIST_INIT_SIZE;
return l;
}
//释放对区内存的函数
void FreeList(LIST *l)
{
//要先释放成员的空间
free(l->elem);
free(l);
}
//第一个参数要传得是插入哪一个线性表中去 i指位置
int InsertList(LIST *l,int i,ElemType *e)
{
//定义一些指针 指向相应的位置
ElemType *p=NULL,*q=NULL,*newElem=NULL;
if(l==NULL || e==NULL)
return 0;
//i指的是第几个位置 不是下标
if(i<1||i>l->length+1)
return 0;
//if有效长度大于最大的长度的时候 重新开辟一块内存
if(l->length>=l->size)
{
newElem=realloc(l->elem,(l->size+_LIST_INCREME)*sizeof(ElemType));
if(newElem==NULL)
return 0;
l->elem=newElem;
l->size+=_LIST_INCREME;
}
//q指向插入的位置 i-1代表下标
q=&l->elem[i-1];
//指向最后一个有效的数据元素
for(p=&(l->elem[l->length-1]);p>=q;p--)
*(p+1)=*p;
*q=*e;
++l->length;
return 1;
}
int DeleteList(LIST *l,int i)
{
ElemType *p=NULL,*q=NULL;
if(l=NULL)
return 0;
if(i<1|| i>l->length)
return 0;
p=&l->elem[i-1];
q=&l->elem[l->length-1];
for(;p<q;p++)
*p=*(p+1);
--l->length;
return 1;
}
stu.h代码如下
#ifndef _STU_H
#define _STU_H
//定义一个学生的结构体
typedef struct
{
char sno[4];
char name[21];
char sex[3];
int score;
}ElemType;
#endif
main.c代码如下
#include <stdio.h>
#include "stu.h"
#include "list.h"
ElemType stu[3]={
{"S101","张三","男",80},
{"S102","小红","女",75},
{"S103","王五","男",90},
};
void main()
{
int i;
LIST *list=NULL;
//通过函数初始化空间
list=InitList();
for(i=0;i<3;i++)
InsertList(list,1,&stu[i]);
DeleteList(list,2);
FreeList(list);
}
分享到:
相关推荐
1. **顺序表**:顺序表是一种简单的数据结构,数据元素按线性顺序排列。文档中包括字符统计、一元多项式相加等练习,这些练习涵盖了对数组的操作,如遍历、计数和合并。 - **字符统计**:统计字符串中各字符出现的...
数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据,以便于进行快速的检索、插入和删除等操作。在C语言中实现数据结构,能够让我们深入理解底层机制,增强编程能力。这本《数据结构...
1. **线性表**:线性表是最基础的数据结构,包括顺序表和链表。书中会讲解如何创建、插入、删除元素,并探讨不同操作的效率分析。 2. **栈与队列**:栈是一种后进先出(LIFO)的数据结构,常用于表达式求值、递归...
7. **顺序表.c** - 顺序表是连续内存空间中存储元素的一维数组,支持随机访问,但插入和删除操作在非末尾位置时效率较低。 8. **链队列.c** - 队列是一种先进先出(FIFO)的数据结构,链队列使用链表实现,可以在两...
C语言作为一种底层、高效的编程语言,是实现数据结构的理想工具。这套“基于C语言的数据结构真题”提供了丰富的实践练习,帮助学生和程序员深入理解和应用数据结构。 一、线性数据结构 1. **数组**:基础数据结构...
《李春葆:数据结构习题与解析(C语言版)》是一本专注于数据结构学习的辅导书籍,特别适合于那些准备报考计算机硕士研究生的学生。数据结构是计算机科学中的核心课程,它研究如何在计算机中组织和存储数据,以便...
内容概要:本文档详细介绍了线性表(顺序表)的基本概念、定义以及一系列基本操作的实现,包括线性表的初始化、插入、查询、遍历等功能,并提供了完整的源代码实例来帮助读者理解和掌握。 适合人群:适合对数据结构...
数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据,以便于进行快速的检索、插入和删除等操作。C语言作为底层编程语言,以其高效和灵活的特点,常被用于实现数据结构。清华大学出版的...
总的来说,这个实战项目提供了对单链表这一基础数据结构的深入理解和实践经验,有助于提升程序员在数据结构和算法方面的技能。通过动手实践,学习者可以更好地理解数据结构的内在逻辑,这对于编写高效的代码和解决...
在"数据结构实战 -- 线性结构动态数组表示法(C实现源码)"项目中,包含以下关键知识点: 1. **动态内存分配**:在C语言中,`malloc()`函数用于动态分配内存,而`realloc()`可以扩展或收缩已分配的内存。这些函数...
总之,C语言数据结构课程设计是一个锻炼逻辑思维、编程技巧和问题解决能力的好机会。通过这个过程,学生不仅能深入理解数据结构和算法,还能提高编程实战能力,为未来从事软件开发等相关工作打下坚实基础。
根据提供的标题“数据结构与算法分析C语言描述”以及描述“数据结构与算法分析C语言描述,原文第二版,从正文开始带书签”,我们可以推测这是一本关于使用C语言来实现和理解数据结构与算法的专业书籍。接下来,我们...
053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就地逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 ...
《数据结构(C语言版)》一书由国内知名计算机科学家严蔚敏与吴伟民合著,主要介绍了各种经典的数据结构,并通过C语言来实现这些结构。 ### 二、C语言与数据结构的关系 C语言是一种广泛使用的高级编程语言,它提供了...
根据提供的信息,“数据结构(C语言)严蔚敏”是一本深入讲解C语言与数据结构的经典教材。本书被广泛认为是学习C语言及其在数据结构领域应用的最佳资源之一。接下来,我们将围绕该书的主要知识点进行详细阐述。 ###...
1. 数据结构:这包括数组、链表、栈、队列、树、图、哈希表等基本概念,以及排序(如冒泡、选择、插入、快速、归并等)、查找(如顺序、二分、哈希等)算法。 2. C语言基础:变量、常量、运算符、控制流程(条件...
"数据结构(C语言版)严蔚敏—习题、试卷及答案"可能是上述题集的补充,可能包含更多实践题目和模拟考试卷,帮助读者熟悉各种数据结构的实战应用。 "数据结构(C语言版)严蔚敏-课件ppt(非常详细)"则是教学课件,通常...
在这个“数据结构项目实战-通讯录”的项目中,我们将深入探讨如何使用数据结构和算法的知识来实现一个实用的通讯录系统。这个系统的核心是高效地存储、查找和管理联系人的信息,包括姓名、电话号码、地址等。我们将...