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]#

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值