最近在备研,但是不方便将电脑带去教室,就希望这这种方式更新数据结构
的总结,会不定时进行更新,有不对的地方欢迎指正,希望大家能如愿上岸。
一、线性表
1、顺序表的实现
(1)静态分配
#include "stdio.h"
#define maxsize 10
typedef struct{
int data[maxsize] ;
int length ;
}SqList;
void InitLIst(SqList &L) {
for(int i=0; i < maxsize; i++)
L.data[i] = 0 ;
L.length = 0 ;
}
int main(){
SqList L ;
InitLIst(L) ;
for(int j = 0;j<L.length;j++)
printf("data[%d]=%d\n", j, L.data[j]) ;
return 0 ;
}
(2)动态分配
#include "stdio.h"
#include "stdlib.h"
#define InitSize 15
typedef struct{
int *data ;
int maxsize ;
int length ;
}SeqList;
void InitList(SeqList &L){
L.data = (int *) malloc(InitSize*sizeof(int )) ;
L.length = 0 ;
L.maxsize = InitSize ;
}
void IncreaseSize(SeqList &L, int len){
int *p = L.data ;
L.data = (int *)malloc((L.maxsize+len)*sizeof(int)) ;
for (int i = 0; i < L.length; i++) {
L.data[i] = p[i];
}
L.maxsize = L.maxsize + len ;
free(p) ;
}
int main(){
SeqList L ;
InitList(L) ;
IncreaseSize(L, 3) ;
return 0 ;
}
2、顺序表的操作
(1) 插入 ListInsert
#include "stdio.h"
#include <stdbool.h>
#define maxsize 10
typedef struct {
int data[maxsize] ;
int length ;
}SqList;
bool ListInsert(SqList &L, int i, int e){
if( i < 1 || i > L.length+1)
return false ;
if(L.length >= maxsize)
return false ;
for (int j = L.length; j >= i ; j--) {
L.data[j] = L.data[j-1] ;
}
L.data[i-1] = e ;
L.length++ ;
return true ;
}
void InitList(SqList &L){
for (int i = 0; i < maxsize; i++) {
L.data[i] = 0 ;
}
L.length = 0 ;
}
int main(){
SqList L ;
InitList(L) ;
ListInsert(L,3,3) ;
return 0 ;
}
(2) 删除 ListDelete
#define maxsize 10
typedef struct {
int data[maxsize] ;
int length ;
}SqList;
void InitList(SqList &L){
for (int i = 0; i < maxsize; i++) {
L.data[i] = 0 ;
}
L.length = 0 ;
}
bool ListDelete(SqList &L , int i , int &e){
if(i < 1 || i > L.length)
return false;
e = L.data[i-1] ;
for(int j = i ;j < L.length ; j++)
L.data[j-1] = L.data[j] ;
L.length-- ;
return true ;
}
int main() {
SqList L;
InitList(L);
int e = -1 ;
if(ListDelete(L,3,e))
printf("已经删除第3个元素,删除的元素值为:%d\n",e) ;
else
printf("位序i不合法,删除失败!!!\n") ;
return 0;
}
(3)查找
#define maxsize 10
typedef struct {
int data[maxsize] ;
int length ;
}SqList;
int GetElem(SqList L, int i ){
if(i < 1 || i > L.length)
return false ;
else
return L.data[i-1] ;
}
- 动态分配创建查找 *
- 按值查找 LocateElem*
#define InitList 10
typedef struct {
int *data ;
int maxsize ;
int length ;
}SqList;
int LocateElem(SqList L, int e){
for(int i = 0 ;i < L.length ; i++)
if(L.data[i] == e)
return i+1 ;
return 0 ;
}
- int,char,double,float等基本数据据类型都可以使用(==)进行比较