void fun1(SqList *L,ElemType e){ int i=0,j; while(i<L->length && L->data[i].zhishu<e.zhishu) i++; if(L->data[i].zhishu==e.zhishu) L->data[i].xishu+=e.xishu; else{ for (j=L->length-1;j>=i;j--) L->data[j+1]=L->data[j]; L->data[i]=e; L->length++;}}
时间: 2024-03-27 19:42:11 浏览: 63
这是一个函数 fun1,它的作用是向一个顺序表 L 中插入一个元素 e。该顺序表中的元素是按照指数从小到大排列的。函数会遍历顺序表,找到第一个指数大于等于 e 的元素位置 i,然后判断该位置的元素是否和 e 的指数相同,如果相同则将两个元素的系数相加,如果不同则将 e 插入到该位置。如果 i 大于等于顺序表的长度,则直接将 e 插入到顺序表的末尾。插入完成后,顺序表的长度会增加 1。
相关问题
#define ListSize 100 typedef struct { ElemType elem[ListSize]; int length; }Sqlist; void sq_dele(Sqlist*L,ElemType K1,ElemType K2) { i=0; while(i<L->length) if((L->elem[i]>=K1)&&(L->elem[i]<=K2)) break; else i++; if(i<L->length) { j=1; while((i+j<L->length)&&(L->elem[i+j]<=K2)) j++; for(k=i+j;k<L->length;k++) L->elem[k-j]=L->[k]; L->length=L->length-j; } }/*sq_dele*/ 添加注释
这段代码定义了一个长度为ListSize的顺序表结构体Sqlist,其中包含了ElemType类型的数组elem和整型变量length。接下来sq_dele函数表示删除顺序表中值在K1和K2之间的元素。其中使用了i、j、k三个整型变量来作为循环计数器。具体实现过程为:
1. 初始化i为0,使用while循环查找第一个值在K1和K2之间的元素,直到找到或者遍历完整个表。
2. 如果找到了该元素,则初始化j为1,使用while循环找到连续的值在K1和K2之间的元素,计算出总共有j个这样的元素。
3. 从第i+j个元素开始,将后面的元素向前移动j个位置,覆盖掉第i到i+j-1个元素。
4. 最后将表的长度减少j。
注释中的/*sq_dele*/表示该段注释是针对sq_dele函数的。
将这段代码改为键盘输入需要排序的数字#include <iostream> using namespace std; #define MAXSIZE 100 typedef struct { int key; char* otherinfo; } ElemType; typedef struct { ElemType* r; int length; } SqList; void BubbleSort(SqList* L) { int m = L->length - 1; int flag = 1; ElemType t; while (m > 0 && flag == 1) { flag = 0; for (int j = 1; j <= m; j++) { if (L->r[j].key > L->r[j + 1].key) { flag = 1; t = L->r[j]; L->r[j] = L->r[j + 1]; L->r[j + 1] = t; } } m--; } } void InsertSort(SqList* L) { for (int i = 2; i <= L->length; i++) { if (L->r[i].key < L->r[i - 1].key) { L->r[0] = L->r[i]; int j; for (j = i - 1; L->r[0].key < L->r[j].key; j--) { L->r[j + 1] = L->r[j]; } L->r[j + 1] = L->r[0]; } } } int main() { int j; SqList L; L.r = new ElemType[MAXSIZE + 1]; L.length = 0; // 初始化 SqList 的 r 数组 for (int i = 1; i <= MAXSIZE; i++) { L.r[i].key = rand(); } L.length = MAXSIZE; printf("排序\n"); printf("***************************************************\n"); printf(" 1-----冒泡排序 \n"); printf(" 2-----直接插入 *\n"); printf
可以将代码改为以下形式,使用循环读取键盘输入的数字,并将其存储到数组中,然后再进行排序:
```cpp
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct {
int key;
char* otherinfo;
} ElemType;
typedef struct {
ElemType* r;
int length;
} SqList;
void BubbleSort(SqList* L) {
int m = L->length - 1;
int flag = 1;
ElemType t;
while (m > 0 && flag == 1) {
flag = 0;
for (int j = 1; j <= m; j++) {
if (L->r[j].key > L->r[j + 1].key) {
flag = 1;
t = L->r[j];
L->r[j] = L->r[j + 1];
L->r[j + 1] = t;
}
}
m--;
}
}
void InsertSort(SqList* L) {
for (int i = 2; i <= L->length; i++) {
if (L->r[i].key < L->r[i - 1].key) {
L->r[0] = L->r[i];
int j;
for (j = i - 1; L->r[0].key < L->r[j].key; j--) {
L->r[j + 1] = L->r[j];
}
L->r[j + 1] = L->r[0];
}
}
}
int main() {
int n, j;
SqList L;
L.r = new ElemType[MAXSIZE + 1];
L.length = 0; // 初始化 SqList 的 r 数组
printf("请输入需要排序的数字个数(不超过100个):");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第%d个数字:", i);
scanf("%d", &(L.r[i].key));
}
L.length = n;
printf("排序\n");
printf("***************************************************\n");
printf(" 1-----冒泡排序 \n");
printf(" 2-----直接插入 *\n");
printf("***************************************************\n");
printf("请选择排序算法:");
scanf("%d", &j);
switch (j) {
case 1:
BubbleSort(&L);
break;
case 2:
InsertSort(&L);
break;
default:
printf("输入有误!\n");
break;
}
printf("排序结果:\n");
for (int i = 1; i <= L.length; i++) {
printf("%d ", L.r[i].key);
}
printf("\n");
return 0;
}
```
阅读全文