#include <stdio.h>
#include <stdlib.h>
//线性表顺序实现
//初始化,查找,插入,删除,合并有序
#define true 1
#define false 0
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT=10
typedef int Status;
typedef int ElemType;
typedef struct SqList{
ElemType *elem;
int length;
int listsize;
}SqList;
SqList* initList(SqList *l){
l->elem=(ElemType*)malloc(LIST_INIT_SIZE *sizeof(ElemType));
l->length=0;
l->listsize=LIST_INIT_SIZE ;
return l;
}
Status insert(SqList* l,int index,int data){
if(index<1||index>l->length+1){
return false;
}
if(l->length>l->listsize){
return false;
}
for(int j=l->length+1;j>index-1;j--){
l->elem[j+1]=l->elem[j];
}
l->elem[index-1]=data;
l->length++;
}
Status search(SqList* l,int index){
if(index<0||index>l->length){
return false;
}
else{
int local=l->elem[index];
printf("%d",local);
}
}
Status delete(SqList* l,int index){
if(index<1||index>l->length+1){
return false;
for(int j=index-1;j<l->length;j++){
l->elem[j]=l->elem[j+1];
}
l->length--;
}
Status mix(SqList* a,SqList* b){
SqList* new=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
Status i=0;
Status j=0;
Status k=0;
Status m=a->length;
Status n=b->length;
while(a->elem[i]<m&&b->elem[j]<n){
if(a->elem[i]<b->elem[j]){
new->elem[k]=a->elem[i];
k++;
i++;
}
else{
new->elem[k]=a->elem[j];
k++;
j++;
}
}
if(a->elem[i]!=0){
new->elem[k]=a->elem[i];
k++;
i++;
}
else if(a->elem[j]!=0){
new->elem[k]=a->elem[j];
k++;
j++;
}
return true;
}
main(){
SqList* arr= initList(arr);
insert(arr,1,1);
for(int i=0;i<arr->length;i++){
printf("%d",arr->elem[i]);
}
return 0;
}
修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
//线性表顺序实现
//初始化,查找,插入,删除,合并有序
#define true 1
#define false 0
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10 //#define LISTINCREAMENT = 10 修改
typedef int Status;
typedef int ElemType;
typedef struct SqList {
ElemType* elem;
int length;
int listsize;
}SqList;
SqList* initList(SqList* l)
{
l->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
l->length = 0;
l->listsize = LIST_INIT_SIZE;
return l;
}
Status insert(SqList* l, int index, int data)
{
if (index < 1 || index > l->length + 1) {
return false;
}
if (l->length > l->listsize) {
return false;
}
for (int j = l->length; j > index - 1; j--) {
//for (int j = l->length + 1; j > index - 1; j--) { 修改
l->elem[j] = l->elem[j - 1]; // l->elem[j + 1] = l->elem[j]; 修改
}
l->elem[index - 1] = data;
l->length++;
}
Status search(SqList* l, int index)
{
if (index < 0 || index > l->length) {
return false;
}
else {
int local = l->elem[index];
printf("%d", local);
}
}
Status Delete(SqList* l, int index) //Status delete(SqList* l, int index) 修改
{
if (index < 1 || index > l->length + 1) {
return false;
}
for (int j = index - 1; j < l->length; j++) {
l->elem[j] = l->elem[j + 1];
}
l->length--;
}
Status mix(SqList* a, SqList* b)
{
SqList* New = initList(New); // 修改
//SqList* new = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); 修改
Status i = 0;
Status j = 0;
Status k = 0;
Status m = a->length;
Status n = b->length;
while (a->elem[i] < m && b->elem[j] < n) {
if (a->elem[i] < b->elem[j]) {
New->elem[k] = a->elem[i]; //new->elem[k] = a->elem[i]; 修改
k++;
i++;
}
else {
New->elem[k] = a->elem[j]; //new->elem[k] = a->elem[j]; 修改
k++;
j++;
}
}
if (a->elem[i] != 0) {
New->elem[k] = a->elem[i]; //new->elem[k] = a->elem[i]; 修改
k++;
i++;
}
else if (a->elem[j] != 0) {
New->elem[k] = a->elem[j]; //new->elem[k] = a->elem[j]; 修改
k++;
j++;
}
return true;
}
int main()
{
SqList* arr = initList(arr);
insert(arr, 1, 0);
insert(arr, 2, 1);
insert(arr, 3, 2);
insert(arr, 4, 3);
insert(arr, 5, 4);
for (int i = 0; i < arr->length; i++) {
printf("%d ", arr->elem[i]);
}
return 0;
}
Status delete(SqList *l, int index) 这个函数的if缺个}
代码问题多多
int main()
{
SqList arr;
initList(&arr);
insert(&arr, 1, 1);
for (int i = 0; i < arr.length; i++)
{
printf("%d ", arr.elem[i]);
}
return 0;
}
【以下回答由 GPT 生成】
这段代码存在几个问题:
在mix
函数中,newList
应该是一个指向SqList
结构体的指针类型,而不是ElemType
类型。所以应该将SqList*
赋给newList
。
在mix
函数中,需要对newList
进行初始化操作,即调用initList
函数对其进行初始化。
在mix
函数中,在合并两个有序表的过程中,需要比较a
和b
两个表中元素的大小,并将较小的元素插入到newList
中,然后根据插入位置更新i
或j
的值。
在mix
函数中,合并完成后需要修改newList
的length
属性。
下面是修改后的代码:
Status mix(SqList* a, SqList* b) {
SqList* newList = initList(newList);
Status i = 0;
Status j = 0;
Status k = 0;
Status m = a->length;
Status n = b->length;
// 合并两个有序表
while (i < m && j < n) {
if (a->elem[i] < b->elem[j]) {
insert(newList, k+1, a->elem[i]);
i++;
} else {
insert(newList, k+1, b->elem[j]);
j++;
}
k++;
}
// 处理剩余未插入的元素
while (i < m) {
insert(newList, k+1, a->elem[i]);
i++;
k++;
}
while (j < n) {
insert(newList, k+1, b->elem[j]);
j++;
k++;
}
newList->length = k;
return true;
}
以上就是对代码进行的修改,修正了mix
函数的错误,并添加了初始化和更新长度的操作。请注意,这只是对代码问题的修改,对于代码的功能逻辑是否正确还需要根据具体需求进行验证。
【相关推荐】
main()
这返回值类型都没有的,怕不是 turbo c 时代的程序吧
你还是找一个 TC2.0 去运行你的程序。