线性表
顺序表示
struct SeqList{ int n; int MAXNUM; DataType *element; } typedef struct SeqList *PSeqList;
- 不适合随机插入和删除
- 节省了空间但是操作的时间复杂度增加了
链接表示
数据域 指针域
struct Node; typedef struct Node *PNode; struct Node{ Datatype info; PNode link; } typedef struct Node *LinkList;
- 存储密度小
- 查找的时间代价比较大
- 循环链表、双链表、循环双链
矩阵
行优先 列优先
- 稀疏矩阵:
三元组表示 伪地址表示
带辅助行向量的二元组表示 行-列表示
下面是一个数组解决Josephus问题的代码例子
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 5 #define MAXNUM 30000 6 7 int main(){ 8 int n, s, m; 9 FILE *fp=fopen("input.txt", "r"); 10 fscanf(fp,"%d %d %d", &n, &s, &m); 11 fclose(fp); 12 FILE *tp=fopen("output.txt", "w"); 13 if (n>=MAXNUM) printf("n is too large!\n"); 14 int a[MAXNUM]; 15 for (int i=0;i<n;i++) a[i]=1; 16 int j=s%n-1, t=0,x; 17 for (int i=0;i<n;i++){ 18 t=0; 19 x=m%(n-i); 20 if(x==0) x=n-i; 21 while (t<x){ 22 if (a[j]==1) t++; 23 // printf("%d %d %d\n",i,j,t); 24 j++; 25 if (j==n) j=0; 26 } 27 if(j==0){ 28 a[n-1]=0; 29 fprintf(tp,"%d ",n); 30 } 31 else{ 32 a[j-1]=0; 33 fprintf(tp,"%d ",j); 34 } 35 } 36 fclose(tp); 37 return 0; 38 }
时间: 2024-09-28 17:35:05