C语言 链表
菜单第1项完成:创建一个仅含头结点的空链表,如果创建成功,输出创建空链表成功,返回头结点的指针,否则输出创建空链表失败,退出程序运行。菜单第2项完成:依次输入一组整数,以-1作为结束的标志,创建由这些输入数据所形成的带头结点的单链表,输出链表的数据信息,返回头结点的指针。
若输入:45,45, 23,45,54,25, -1。则生成链表:
#include<stdio.h>
#include<stdlib.h>
int Menu(void);
struct link *Num1();
struct link *Num2(struct link *head);
struct link
{
int data;
struct link *next;
}*b;
void main()
{
int choice;
struct link *head1;
while(1)
{
choice=Menu();
switch(choice)
{
case 1:head1=Num1();break;
case 2:Num2(head1);break;
/*case 3:Num3();break;
case 4:Num4();break;
case 5:Num5();break;*/
case 6:
printf("End of program!\n");
exit(0);
default:
printf("Input error!!!\n");
}
}
}
int Menu()
{
int choice;
printf("1、任务一\n");
printf("2、任务二\n");
printf("3、任务三\n");
printf("4、任务四\n");
printf("5、任务五\n");
printf("6、退出程序\n");
printf("Please input your choice:");
scanf("%d",&choice);
return choice;
}
struct link *Num1()
{
struct link *head=NULL;
b = (struct link *)malloc(sizeof(struct link));
head=b;
if(b==NULL)
{
printf("创建空链表失败\n");
exit(1);
}
else
printf("创建空链表成功\n");
free(b);
return head;
}
struct link *Num2(struct link *head)
{
struct link *temp;
printf("输入一组数:");
scanf("%d",b->data);
if(head!=NULL)
{
temp=head;
head=b;
b->next=temp;
}
else
{
head=b;
b->next=NULL;
}
return head;
}
菜单第一项创建一个空链表都不确定对不对,希望能帮我看看,再帮我写一下菜单二,能对着我的代码更改就最好了嘿嘿,对链表比较陌生,谢谢谢谢。
#include<stdio.h>
#include<stdlib.h>
int Menu(void);
struct link *Num1();
struct link *Num2(struct link *head);
struct link
{
int data;
struct link *next;
}*link;
int main()
{
int choice;
struct link *head;
while(1)
{
choice=Menu();
switch(choice)
{
case 1:head=Num1();break;
case 2:Num2(head);break;
/*case 3:Num3();break;
case 4:Num4();break;
case 5:Num5();break;*/
case 6:
printf("End of program!\n");
exit(0);
default:
printf("Input error!!!\n");
break;
}
}
getchar();
return 0;
}
int Menu()
{
int choice;
printf("1、任务一\n");
printf("2、任务二\n");
printf("3、任务三\n");
printf("4、任务四\n");
printf("5、任务五\n");
printf("6、退出程序\n");
printf("Please input your choice:");
scanf("%d",&choice);
return choice;
}
struct link *Num1()
{
struct link *head=NULL;
head = (struct link*)malloc(sizeof(struct link));
head->next = NULL;
if(head==NULL)
{
printf("创建空链表失败\n");
exit(1);
}
else
printf("创建空链表成功\n");
return head;
}
struct link *Num2(struct link *head)
{
struct link *temp, *p;
p = head;
if(p==NULL)
{
printf("链表不存在!\n");
exit(1);
}
else
{
while (1)
{
temp = (struct link*)malloc(sizeof(struct link));
if(temp==NULL)
{
printf("内存分配失败!\n");
exit(1);
}
printf("输入一个数(-1退出): ");
scanf("%d",&temp->data);
if (temp->data== -1)
break;
p->next = temp;
temp->next = NULL;
p = temp;
}
p->next = NULL;
}
for (p=head->next; head; p=p->next)
{
printf("%d ", p->data);
}
printf("\n");
return head;
}
基本实现了,还存在一些问题,自己参考吧 chxchxkkk 发表于 2020-4-1 11:17
基本实现了,还存在一些问题,自己参考吧
使用了malloc函数,你后边没有释放空间,如果添加了free有影响吗
页:
[1]