blog-hexo/source/_posts/ky/线性表.md
2024-01-08 14:32:56 +08:00

344 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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;
}
```