C# · 12月 20, 2021

数据结构部分-线性表

@H_4030@首先要分清楚,线性表是逻辑结构,而存储结构有两种,一种是顺序存储,比如

@H4030@int a[10]{1.2.3.4.5.6.7.8.9.0};

@H403_0@这样一个一维数组,就是一个顺序存储的线性表。

@H_4030@

@H4030@这是c语言中最简单的数组。

@H4030@

@H4030@像很多书中这样表示

@H4030@#include<stdio.h>

@H4030@#define MAXSIZE 10 // 顺序表的最大存储容量

@H403_0@typedef struct sqlist

@H_4030@{

@H4030@int data[MAXSIZE]; // 用数组表示顺序表

@H4030@int length; // 线性表当前长度

@H4030@};

@H4030@void main(){

@H4030@int i=0;

@H403_0@struct sqlist list;

@H_4030@for(i= 0;i<10;i++)

@H4030@list.data[i] = i;

@H4030@for(i = 0;i<10;i++)

@H4030@printf(“%dn”,list.data[i]);

@H4030@}

@H403_0@输出结果

@H_4030@1

@H4030@2

@H4030@3

@H4030@4

@H4030@5

@H4030@6

@H4030@7

@H4030@8

@H4030@9

@H4030@Press any key to continue

@H403_0@这也是一个顺序存储的线性表。

@H_4030@另一种是链式存储,就是我们常说的链表比如

@H4030@#include<stdio.h>

@H4030@#include<stdlib.h>

@H4030@typedef struct Node

@H4030@{

@H4030@int data;

@H4030@struct Node *next;

@H4030@}Node;

@H4030@int main(){

@H4030@int i=0;

@H4030@Node *p;

@H4030@Node head = (Node )malloc(sizeof(Node));//建立头节点,注意头节点不存储数据

@H4030@head->next = 0;//一开始头节点指向空

@H4030@for(i = 0;i<10;i++){//采用头插法

@H4030@p = (Node *)malloc(sizeof(Node));//指针用来指向新申请的空间

@H4030@p->data = i;

@H4030@p->next = head->next;//p->next指向头节点的下一节点,

@H403_0@//比如插入第一个节点时,p->next指向0

@H_4030@head->next = p;//头节点指向新插入的节点

@H4030@}

@H4030@p = head->next;//因为头节点不存储数据,所以p指向头节点的下一节点

@H4030@for(i = 0;i<10;i++){

@H4030@printf(“%dn”,p->data);

@H4030@p = p->next;

@H4030@}

@H4030@}

@H403_0@输出结果

@H_4030@9

@H4030@8

@H4030@7

@H4030@6

@H4030@5

@H4030@4

@H4030@3

@H4030@2

@H4030@1

@H403_0@Press any key to continue