本文主要是介绍algo2-3-1.c 教科书中图2.10 静态链表示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/* c1.h (程序名) */
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
/* 函数结果状态代码 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
/* c2-3.h 线性表的静态单链表存储结构 */
#define MAX_SIZE 100 /* 链表的最大长度 */
typedef struct
{
ElemType data;
int cur;
}component,SLinkList[MAX_SIZE];
数组的一个分量表示一个结点,同时用游标(指示器cur)代替指针指示结点在数组中的相对位置。
数组的第0分量可看成是头结点,其指针域指示链表的第一个结点。
这种存储结构仍需要预先分配一个较大的存储空间,但在做线性表的插入和删除时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。
/* algo2-7.c 教科书中图2.10 静态链表示例 */
/* 第1个结点的位置在[0].cur中。成员cur的值为0,则到链表尾 */
#include"c1.h"
#define N 6 /* 字符串长度 */
typedef char ElemType[N];
#include"c2-3.h"
int main()
{
SLinkList s={{"",1},{"ZHAO",2},{"QIAN",3},{"SUN",4},{"LI",5},{"ZHOU",6},{"WU",7},{"ZHENG",8},{"WANG",0}}; /* 教科书中图2.10(a)的状态 */
int i;
i=s[0].cur; /* i指示第1个结点的位置 */
while(i)
{ /* 输出教科书中图2.10(a)的状态 */
printf("%s ",s[i].data); /* 输出链表的当前值 */
i=s[i].cur; /* 找到下一个 */
}
printf("\n");
s[4].cur=9; /* 按教科书中图2.10(b)修改(在"LI"之后插入"SHI") */
s[9].cur=5;
strcpy(s[9].data,"SHI");
s[6].cur=8; /* 删除"ZHENG" */
i=s[0].cur; /* i指示第1个结点的位置 */
while(i)
{ /* 输出教科书中图2.10(b)的状态 */
printf("%s ",s[i].data); /* 输出链表的当前值 */
i=s[i].cur; /* 找到下一个 */
}
printf("\n");
}
运行:
[root@localhost algorithm]# ls
algo2-7.c c1.h c2-3.h
[root@localhost algorithm]# gcc algo2-7.c -o algo2-7
[root@localhost algorithm]# ls
algo2-7 algo2-7.c c1.h c2-3.h
[root@localhost algorithm]# ./algo2-7
ZHAO QIAN SUN LI ZHOU WU ZHENG WANG
ZHAO QIAN SUN LI SHI ZHOU WU WANG
[root@localhost algorithm]#
这篇关于algo2-3-1.c 教科书中图2.10 静态链表示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!