344 lines
5.7 KiB
Markdown
344 lines
5.7 KiB
Markdown
|
---
|
|||
|
title: 线性表
|
|||
|
top: 0
|
|||
|
categories:
|
|||
|
- 读书
|
|||
|
status: doing
|
|||
|
use: katex
|
|||
|
abbrlink: 1106
|
|||
|
---
|
|||
|
|
|||
|
# 静态初始化
|
|||
|
|
|||
|
```c
|
|||
|
#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 i = 0;i< Maxsize;i++){
|
|||
|
printf("data[%d]=%d\n",i,L.data[i]);
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# 插入数据
|
|||
|
|
|||
|
```c
|
|||
|
#include<stdio.h>
|
|||
|
#include<stdlib.h>
|
|||
|
#define MaxSize 10
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int *data;
|
|||
|
int length;
|
|||
|
}SeqList;
|
|||
|
|
|||
|
void ListInsert(SeqList *L,int i,int e){
|
|||
|
for(int j = L->length;j>=i;j--){
|
|||
|
L->data[j] = L->data[j-1];
|
|||
|
}
|
|||
|
L->data[i-1] = e;
|
|||
|
L->length ++;
|
|||
|
}
|
|||
|
void InitList(SeqList *L){
|
|||
|
L->data = (int*)malloc(sizeof(int)*MaxSize);
|
|||
|
L->length = 0;
|
|||
|
}
|
|||
|
void PrintList(SeqList L){
|
|||
|
for(int i = 0;i <L.length;i++){
|
|||
|
printf("%d\n",L.data[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
int main(){
|
|||
|
SeqList L;
|
|||
|
InitList(&L);
|
|||
|
L.data[0] = 0;
|
|||
|
L.length++;
|
|||
|
L.data[1] = 1;
|
|||
|
L.length++;
|
|||
|
L.data[2] = 2;
|
|||
|
L.length++;
|
|||
|
L.data[3] = 3;
|
|||
|
L.length++;
|
|||
|
L.data[4] = 4;
|
|||
|
L.length++;
|
|||
|
PrintList(L);
|
|||
|
ListInsert(&L,3,3);
|
|||
|
PrintList(L);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# 删除数据
|
|||
|
|
|||
|
```c
|
|||
|
#include<stdio.h>
|
|||
|
#include<stdlib.h>
|
|||
|
#include<stdbool.h>
|
|||
|
#define MaxSzie 10
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int *data;
|
|||
|
int length;
|
|||
|
}SeqList;
|
|||
|
|
|||
|
void InitList(SeqList *L){
|
|||
|
L->data = (int*)malloc(sizeof(int)*MaxSzie);
|
|||
|
L->length = 0;
|
|||
|
}
|
|||
|
|
|||
|
bool InsertList(SeqList *L,int i,int e){
|
|||
|
if(i<1||i>L->length+1){
|
|||
|
return false;
|
|||
|
}
|
|||
|
if(L->length>=MaxSzie){
|
|||
|
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;
|
|||
|
}
|
|||
|
|
|||
|
bool DeleteList(SeqList *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;
|
|||
|
}
|
|||
|
|
|||
|
void PrintList(SeqList L){
|
|||
|
for(int i = 0;i < L.length;i ++){
|
|||
|
printf("%d\n",L.data[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int main(){
|
|||
|
SeqList L;
|
|||
|
InitList(&L);
|
|||
|
for(int i = 0;i < 5; i++){
|
|||
|
InsertList(&L,i,i);
|
|||
|
}
|
|||
|
PrintList(L);
|
|||
|
int e = -1;
|
|||
|
if(DeleteList(&L,3,&e)){
|
|||
|
printf("已删除第3个元素,删除元素值为%d\n",e);
|
|||
|
}
|
|||
|
else{
|
|||
|
printf("位序i不合法,删除失败\n");
|
|||
|
}
|
|||
|
PrintList(L);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# 静态线性表按位查找
|
|||
|
|
|||
|
```c
|
|||
|
#include<stdio.h>
|
|||
|
#include<stdlib.h>
|
|||
|
#include<stdbool.h>
|
|||
|
#define MaxSize 10
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int data[MaxSize];
|
|||
|
int length;
|
|||
|
}SeqList;
|
|||
|
|
|||
|
void InitList(SeqList *L){
|
|||
|
for(int i = 0;i < MaxSize;i ++){
|
|||
|
L->data[i] = 0;
|
|||
|
}
|
|||
|
L->length = 0;
|
|||
|
}
|
|||
|
|
|||
|
void InsertList(SeqList *L,int i ,int e){
|
|||
|
L->data[i] = e;
|
|||
|
L->length ++;
|
|||
|
}
|
|||
|
int GetElement(SeqList L,int i){
|
|||
|
return L.data[i-1];
|
|||
|
}
|
|||
|
|
|||
|
int main(){
|
|||
|
SeqList L;
|
|||
|
InitList(&L);
|
|||
|
for(int i = 0;i < 9; i++){
|
|||
|
InsertList(&L,i,i);
|
|||
|
}
|
|||
|
printf("%d\n",GetElement(L,5));
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# 动态初始化
|
|||
|
|
|||
|
```c
|
|||
|
#include<stdio.h>
|
|||
|
#include<stdlib.h>
|
|||
|
#define InitSize 10
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int *data;
|
|||
|
int MaxSize;
|
|||
|
int length;
|
|||
|
}SeqList;
|
|||
|
void InitList(SeqList *L){
|
|||
|
L->data = (int*)malloc(sizeof(int)*InitSize);
|
|||
|
L->length = 0;
|
|||
|
L->MaxSize = InitSize;
|
|||
|
}
|
|||
|
void IncreaseSize(SeqList *L,int len){
|
|||
|
int *p = L->data;
|
|||
|
L->data = (int*)malloc(sizeof(int)*(InitSize+len));
|
|||
|
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);
|
|||
|
printf("线性表原长度:%d",L.MaxSize);
|
|||
|
IncreaseSize(&L,5);
|
|||
|
printf("线性表扩容后长度:%d",L.MaxSize);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# 动态线性表按值查找
|
|||
|
|
|||
|
```c
|
|||
|
#include<stdio.h>
|
|||
|
#include<stdlib.h>
|
|||
|
#include<stdbool.h>
|
|||
|
#define InitSize 16
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int *data;
|
|||
|
int MaxSize;
|
|||
|
int length;
|
|||
|
}SeqList;
|
|||
|
|
|||
|
void InitList(SeqList *L){
|
|||
|
L->data = (int*)malloc(sizeof(int)*InitSize);
|
|||
|
for(int i = 0; i < L->length;i ++){
|
|||
|
L->data[i] = 0;
|
|||
|
}
|
|||
|
L->MaxSize = InitSize;
|
|||
|
L->length = 0;
|
|||
|
}
|
|||
|
|
|||
|
int GetElement(SeqList L,int e){
|
|||
|
for(int i = 0;i < L.length;i ++){
|
|||
|
if(L.data[i]==e){
|
|||
|
return i+1;
|
|||
|
}
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
bool InsertList(SeqList *L,int i,int e){
|
|||
|
if(i<1||i>L->length+1){
|
|||
|
return false;
|
|||
|
}
|
|||
|
if(L->length>=L->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;
|
|||
|
}
|
|||
|
int main(){
|
|||
|
SeqList L;
|
|||
|
InitList(&L);
|
|||
|
for(int i = 1;i < 9; i++){
|
|||
|
InsertList(&L,i,i-1);
|
|||
|
}
|
|||
|
printf("查找到的结果为%d",GetElement(L,5));
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# 动态线性表按位查找
|
|||
|
|
|||
|
```c
|
|||
|
#include<stdio.h>
|
|||
|
#include<stdlib.h>
|
|||
|
#include<stdbool.h>
|
|||
|
#define InitSize 10
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int *data;
|
|||
|
int MaxSize;
|
|||
|
int length;
|
|||
|
}SeqList;
|
|||
|
|
|||
|
void InitList(SeqList *L){
|
|||
|
L->data = (int*)malloc(sizeof(int)*InitSize);
|
|||
|
for(int i = 0;i < InitSize;i ++){
|
|||
|
L->data[i] = 0;
|
|||
|
}
|
|||
|
L->MaxSize = InitSize;
|
|||
|
L->length = 0;
|
|||
|
}
|
|||
|
|
|||
|
int GetElement(SeqList L,int i){
|
|||
|
return L.data[i-1];
|
|||
|
}
|
|||
|
|
|||
|
bool InsertList(SeqList *L,int i,int e){
|
|||
|
if(i<1||i>L->length+1){
|
|||
|
return false;
|
|||
|
}
|
|||
|
if(L->length>=L->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 PrintList(SeqList L){
|
|||
|
for(int i = 0;i < L.length;i ++){
|
|||
|
printf("%d\n",L.data[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int main(){
|
|||
|
SeqList L;
|
|||
|
InitList(&L);
|
|||
|
for(int i = 1;i < 10;i ++){
|
|||
|
InsertList(&L,i,i-1);
|
|||
|
}
|
|||
|
PrintList(L);
|
|||
|
printf("查找到的结果为%d",GetElement(L,6));
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|