数据结构(C语言版)严蔚敏(线性表队列栈数组树图等数据结构参考代码,持续更新中。。。)
Posted il_持之以恒_li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版)严蔚敏(线性表队列栈数组树图等数据结构参考代码,持续更新中。。。)相关的知识,希望对你有一定的参考价值。
前言:本篇文章主要提供相关数据结构的实现的参考代码
1. 线性表
线性表的顺序存储(顺序表)和链式存储(链表)
1.1 顺序表
头文件:SqList.h
#ifndef SQLIST_H_INCLUDED
#define SQLIST_H_INCLUDED
#define LIST_INIT_SIZE 100
// 顺序表初始大小
#define LISTINCREMENT 10
// 超出当前顺序表容量时增加的容量大小
typedef int ElemType;
typedef struct
ElemType *data;
// 动态分配数组指针
int length,MaxSize;
SqList;
void InitList_Sq(SqList &L);
// 构造一个空的顺序表L
void DestroyList_Sq(SqList &L);
// 销毁顺序表L
void ClearList_Sq(SqList &L);
// 将顺序表L重置为空
bool ListEmpty_Sq(SqList L);
// 判断顺序表L是否为空
int ListLength_Sq(SqList L);
// 返回顺序表L中数据元素的个数
bool GetElem_Sq(SqList L,int pos,int &e);
// 用e返回顺序表L中第pos个数据元素的值
bool ListInsert_Sq(SqList &L,int pos,int e);
// 在顺序表L中第pos个位置之前插入新的元素e
bool ListDelete_Sq(SqList &L,int pos,int &e);
// 删除顺序表L的第pos个数据元素,并用e返回
int LocateElem_Sq(SqList L,int e);
// 返回顺序表L中第一个与e相等的数据元素的位序
#endif // SQLIST_H_INCLUDED
其他文件:SqList.cpp
#include "SqList.h"
#include <stdlib.h>
void InitList_Sq(SqList &L)
L.data = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!L.data)
exit(-1);
L.length = 0;
L.MaxSize = LIST_INIT_SIZE;
void DestroyList_Sq(SqList &L)
free(L.data);
// 释放data所指向的内存空间
L.data = NULL;
L.length = 0;
L.MaxSize = 0;
void ClearList_Sq(SqList &L)
L.length = 0;
bool ListEmpty_Sq(SqList L)
return L.length == 0;
int ListLength_Sq(SqList L)
return L.length;
bool GetElem_Sq(SqList L,int pos,int &e)
if(pos<1 || pos>L.length)
return false;
e = L.data[pos-1];
return true;
bool ListInsert_Sq(SqList &L,int pos,int e)
if(pos<1 || pos >L.length + 1)
return false;
if(L.length >= L.MaxSize)
ElemType *newbase = (ElemType *)realloc(L.data,(L.MaxSize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(-1);
L.MaxSize += LISTINCREMENT;
ElemType *p = &(L.data[pos-1]);
for(ElemType *p1 = &(L.data[L.length-1]);p1>=p;p1--)
*(p1+1) = *p1;
*p = e;
// 用指针实现
/*for(int i = L.length-1;i>=pos;i--)
L.data[i+1] = L.data[i];
L.[pos-1] = e;*/
++ L.length;
return true;
bool ListDelete_Sq(SqList &L,int pos,int &e)
if(pos<1 || pos>L.length)
return false;
ElemType *p = &(L.data[pos-1]);
e = *p;
/*for(int i = pos;i<L.length;i++)
L.data[i-1] = L.data[i];*/
for(;p<&(L.data[L.length-1]);p++)
*p = *(p+1);
-- L.length;
return true;
int LocateElem_Sq(SqList L,int e)
for(int i=0;i<L.length;i++)
if(L.data[i] == e)
return i+1;
return -1;
主文件:main.cpp
#include <stdlib.h>
#include <stdio.h>
#include "SqList.h"
void Print_SqList(SqList L)
ElemType e;
for(int i=0;i<L.length;i++)
GetElem_Sq(L,i+1,e);
printf("%d ",e);
int main()
SqList Sq;
InitList_Sq(Sq);
for(int i=0;i<200;i++)
ListInsert_Sq(Sq,i+1,i+1);
ListInsert_Sq(Sq,100,300);
Print_SqList(Sq);
ElemType e;
e = LocateElem_Sq(Sq,300);
printf("\\n%d\\n",e);
Print_SqList(Sq);
ListDelete_Sq(Sq,100,e);
printf("\\n%d\\n",e);
Print_SqList(Sq);
return 0;
运行结果:
关于运行结果的解释:先在顺序表中插入1-200这些数,然后在顺序表下标为100处插入数据元素300,最后将顺序表下标为100的数据元素删除。
1.2 链表
以上是关于数据结构(C语言版)严蔚敏(线性表队列栈数组树图等数据结构参考代码,持续更新中。。。)的主要内容,如果未能解决你的问题,请参考以下文章
数据结构(C语言版)严蔚敏(线性表队列栈串树图等数据结构参考代码,持续更新中。。。)
谁有《数据结构》(C语言版)严蔚敏,清华大学2005年的课本?麻烦把目录告知,非常感谢