新人不太会改bug,运行不了,求大佬帮助,谢谢!
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define List_Init_Size 100
#define List_Increment 100
typedef Status;
typedef Elemtype;
typedef struct Sqlist{
Elemtype * slist;
int length;
int listsize;
}Sqlist;/*顺序表*/
typedef struct LNode{
Elemtype data;
struct LNode * next;
}LNode,*LinkList;/*链表*/
LinkList Create_Single_List(int n)
{
LNode *p,*q,*head;
int x,i;
if(n<=0)
return ERROR;
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
q=head;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("please input data %d:",i);
scanf("%d",&x);
p->data=x;
p->next=q->next;
q->next=p;
q=p;
}
return head;
}/*建立带头结点的单链表*/
void Print_Single_List(LinkList L)
{
L=L->next;
while(L)
{
printf("%4d",L->data);
L=L->next;
}
}/*输出带头结点的单链表*/
LinkList CreatexhList(int n)
{
LNode *head,*p,*q;
int i,x;
head=(LinkList)malloc(sizeof(LNode));
head->next=NULL;
q=head;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("please input data %d:",i);
scanf("%d",&x);
p->data=x;
p->next=q->next;
q->next=p;
q=p;
}
p->next=head;
return head;
}//建立循环单链表
void PrintListxh(LinkList L)
{
LNode *p;
p=L->next;
while(p->next!=L)
{
printf("%4d",p->data);
p=p->next;
}
printf("%4d\n",p->data);
}/*输出循环单链表*/
Status InitList(Sqlist * s)
{
s->slist=(Elemtype *)malloc(List_Init_Size * sizeof(Elemtype));
if(!s->slist)
return ERROR;
s->length = 0;
s->listsize = List_Init_Size;
return OK;
}/*初始化顺序表*/
Status CreateList(Sqlist * s,int n)
{
Elemtype x;
int i;
for(i=0;i<n;i++)
{
printf("please input data %d: ",i+1);
scanf("%d",&x);
if(!InsertList(s,i+1,x))
return ERROR;
}
return OK;
} /*建立顺序表*/
Status InsertList(Sqlist *s,int i,int k)
{
int j;
if(i<1||i>s->length+1)
return ERROR;
if(s->length>=s->listsize) /*如果空间不足,则继续分配空间 */
{
s->slist=(Elemtype *)realloc(s->slist,(s->listsize+List_Increment)*sizeof(Elemtype));
}
if(!s->slist)
return ERROR;
s->listsize+=List_Increment;
for(j=s->length-1;j>=i-1;j--)
{
s->slist[j+1]=s->slist[j]; /*元素后移 */
}
s->slist[i-1]=k; /*在第i个位置插入元素 */
s->length++;
return OK;
}
Status PrintList(Sqlist *s)
{
int i=1;
while(i<=s->length)
{
printf("%4d",s->slist[i-1]);
i++;
}
return OK;
}/*-输出顺序表*/
LinkList lianjie(LinkList L1,LinkList L2)
{
LNode * p,* q;
q=L1->next;
p=L2->next;
L2->next=q;
while(q->next!=L1)
q=q->next;
q->next=p;
free(L1);
return L2;
}//连接两个循环单链表
Status InsertkList(Sqlist * s,int k)
{
int i=1;
while(i<=s->length)
{
if(s->slist[i-1]<k)
i++;
else
break;
}
InsertList(s,i,k);
return OK;
}//插入k,使得顺序表仍然递增
Status ReverseLsit(Sqlist * s)
{
int i,t;
for(i=0;i<(s->length)/2;i++)
{
t=s->slist[i];
s->slist[i]=s->slist[s->length-i-1];
s->slist[s->length-i-1]=t;
}
return OK;
}
Status ReversedanList(LinkList L)
{
LNode * p,* q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
return OK;
}//逆置单链表
Status DeleteList(LinkList L,int i)
{
int j=0;
LinkList p=L,q;
if(!(p->next)||j>i-1)
return ERROR;
while(j<i-1&&p->next)
{
p=p->next;
j++;
}
q=p->next;/*第i个*/
p->next=q->next;
free(q);
return OK;
}
LinkList DeleteListhead(LinkList L)
{
LinkList p=L,q;
q=L->next;
while(p->next!=L)
{
p=p->next;
}
p->next=q;
free(L);
return q;
}
int main()
{
LinkList L=NULL,L1=NULL,L2=NULL;
Sqlist s,valist;
int x,n,m;
printf("please input x:");
scanf("%d",&x);
switch(x)
{
case 1 :/*1 单链表*/
printf("please input n: ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-Create Single LinkList:\n");
L=Create_Single_List(n); /*建立带头结点的单链表*/
printf("\n2-Print Single LinkList:\n");
Print_Single_List(L); /*输出带头结点的单链表*/
};break;
case 2 :/*2 循环单链表*/
printf("please input n: ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-Create Circule LinkList:\n");
L=Create_Circule_List(n); /*建立带头结点的循环单链表*/
printf("\n2-Print Circule LinkList:\n");
PrintList_Circule(L); /*输出带头结点的循环单链表*/
};break;
case 3 :/*3 递增顺序表*/
printf("please input n: ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-InitList and CreateList :\n");
InitList(&s);
CreateList(&s,n);
printf("\n2-Print SqList :\n");
PrintList(&s);
};break;
case 4 :/*4 连接两个循环单链表*/
printf("Connect L1 and L2 LinkList :\n");
printf("please input m : ");
scanf("%d",&m);
if(m>0)
{
printf("\n1-Create Circule LinkList:\n");
L1=Create_Circule_List(m);
printf("\n2-Print Circule LinkList:\n");
PrintList_Circule(L1);
}/*建立循环链表L1*/
printf("please input n : ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-Create Circule LinkList:\n");
L2=Create_Circule_List(n);
printf("\n2-Print Circule LinkList:\n");
PrintList_Circule(L2);
}/*建立循环链表L2*/
if(m<n)
{
printf("Print Connect L1 and L2 LinkList :\n");
L2=Connect(L1,L2);
PrintList_Circule(L2);
}
else
{
printf("Print Connect L1 and L2 LinkList :\n");
L2=Connect(L2,L1);
PrintList_Circule(L2);
};break;
case 5 :/*5 插入x使顺序表仍递增 */
printf("please input n: ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-InitList and CreateList :\n");
InitList(&valist);
CreateList(&valist,n);
printf("\n2-Print SqList :\n");
PrintList(&valist);
printf("\n3-please input data x : ");
scanf("%d",&x);
printf("\n4-Create and Print valist:\n");
Insert_x_List(&valist,x);
PrintList(&valist);
} ;break;
case 6 :/*顺序表的就地逆置*/
printf("please input n : ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-Creata SqList : \n");
InitList(&s);
CreateList(&s, n);
printf("\n2-Print SqList : \n");
PrintList(&s);
printf("\n3-Print the Reverse SqList :\n");
ReverseLsit(&s);
PrintList(&s);
};break;
case 7 :/*单链表的就地逆置*/
printf("please input n : ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-Create Single Linklist : \n");
L=Create_Single_List(n);
printf("\n2-Print Single Linklist :\n");
Print_Single_List(L);
printf("\n3-Print Reverse Single Linklist :\n");
Reverse_Single_List(L);
Print_Single_List(L);
}break;
case 8 :/*单链表中,节点的删除 */
printf("please input n : ");
scanf("%d",&n);
if(n>0)
{
printf("\n1-Create Single Linklist : \n");
L=Create_Single_List(n);
printf("\n2-Print Single Linklist :\n");
Print_Single_List(L);
printf("\n3-please input the delete data location : ");
scanf("%d",&x);
DeleteList(L,x);
printf("\n4-Print Single Linklist :\n");
Print_Single_List(L);
}break;
case 9 :
return 0;
}
for(i=0;;i++){
printf("1-输出带头节点的单链表\n");
printf("2-输出带头节点的循环单链表\n");
printf("3-输出递增有序的顺序表\n");
printf("4-输出两个带头节点的循环链表的合并\n");
printf("5-输出有序顺序表的插入\n");
printf("6-输出顺序表的就地逆置\n");
printf("7-输出单链表的就地逆置\n");
printf("8-输出单链表中节点的删除\n");
printf("\n");
printf("请选择 二级菜单的k:\n");
}
printf("\n");
}
return 0;
}
参考GPT和自己的思路:
根据代码中的注释,该程序包含以下几个功能:
1.建立带头结点的单链表
2.建立带头结点的循环单链表
3.建立递增有序的顺序表
4.连接两个带头结点的循环链表
5.有序顺序表的插入
6.顺序表的就地逆置
7.单链表的就地逆置
8.单链表中节点的删除
针对“新人不太会改bug,运行不了,求大佬帮助,谢谢!”这个问题,需要更详细的错误信息和运行环境来进行分析和解决。可以试着检查以下几个方面:
1.是否正确安装和配置了编译环境,例如编译器和相关库文件。
2.是否正确连接了所需的库文件。
3.代码中是否存在语法错误或逻辑错误。
4.是否正确初始化变量和输入参数。
另外,建议在代码中添加注释和调试信息,以便更好地找到问题和进行调整。
参考GPT和自己的思路:
这段代码存在一些问题,但是没有具体的错误信息和上下文,无法准确分析和解决问题。建议在出现问题时,提供具体的错误信息、问题场景和代码上下文,以便更好的定位问题和解决问题。此外,新人应该多学习并练习调试代码的能力,以便更好的排除问题。