1 结构体
typedef struct Node
{
int data;
struct Node *next;
}Node;
2链表名字:*s,链表头指针*H,链表尾指针*End;
三个函数 主函数 头结点先为空的函数 和建立链表函数.
然后我会对相关的语句提问题...答完追加
谢谢了.
可以以输入数据c=getchar() 来使链表结束.
尾插法建链表
答案:3 悬赏:10 手机版
解决时间 2021-02-11 23:17
- 提问者网友:富士山上尢
- 2021-02-10 22:17
最佳答案
- 五星知识达人网友:woshuo
- 2021-02-10 23:52
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node *next;
}Node;
void InitList(Node **H);
void CreatList(Node *H);
void putList(Node *H);
void SearchList(Node *H,char e);
void DelList(Node *H,char e);
void InsList(Node *H,int i,char e);
int main()
{
Node *H;
int i,num;
char e;
printf("1.创建链表\n");
printf("2.查找\n");
printf("3.删除\n");
printf("4.插入\n");
printf("5.输出链表\n");
printf("请输入:");
while (scanf("%d",&num)!=EOF)
{
getchar();
if(num==1)
{
InitList(&H);
CreatList(H);
}
else if(num==2)
{
printf("请输入需要查找的元素:");
scanf("%c",&e);
SearchList(H,e);
}
else if(num==3)
{
printf("请输入需要删除的元素:");
scanf("%c",&e);
DelList(H,e);
}
else if(num==4)
{
printf("请输入需要插入的元素:");
scanf("%c",&e);
printf("请输入需要插入元素的位置:");
scanf("%d",&i);
InsList(H,i,e);
}
else if(num==5)
{
putList(H);
}
else printf("错误!\n");
printf("1.创建链表\n");
printf("2.查找\n");
printf("3.删除\n");
printf("4.插入\n");
printf("5.输出链表\n");
printf("请输入:");
}
return 0;
}
void InitList(Node **H) //初始化
{
*H=(Node *)malloc(sizeof(Node));
(*H)->next=NULL;
}
void CreatList(Node *H) //创建
{
char c;
Node *End=NULL,*L=NULL;
End=H;
int flag=1;
while(flag)
{
scanf("%c",&c);
getchar();
if(c!='s')
{
L=(Node *)malloc(sizeof(Node));
L->data=c;
End->next=L;
End=L;
}
else
{
End->next=NULL;
flag=0;
}
}
}
void SearchList(Node *H,char e) //查找
{
int flag=1;
Node *p=NULL;
p=H->next;
while(flag)
{
if(p->data==e)
{
printf("有此元素\n");
flag=0;
}
else if (p->next==NULL)
{
printf("无此元素\n");
flag=0;
}
else p=p->next;
}
}
void DelList(Node *H,char e) //删除
{
int flag=1;
Node *o=NULL,*p=NULL,*q=NULL;
q=H->next;
while (flag)
{
if (q->data!=e)
{
q=q->next;
}
if(q->next==NULL)
{
printf("无此元素\n");
flag=0;
}
if(q->data==e)
{
break;
}
}
p=q;
q=H;
while(q->next!=p)
{
q=q->next;
}
q->next=q->next->next;
free(p);
}
void InsList(Node *H,int i,char e) //插入
{
int j=0;
Node *p=NULL,*q=NULL,*o=NULL;
p=H;
q=H;
o=(Node *)malloc(sizeof(Node));
o->data=e;
while(j!=i-1)
{
p=p->next;
j++;
}
o->next=p->next;
p->next=o;
}
void putList(Node *H) //输出
{
Node *p=NULL;
p=H->next;
while(p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
}
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node *next;
}Node;
void InitList(Node **H);
void CreatList(Node *H);
void putList(Node *H);
void SearchList(Node *H,char e);
void DelList(Node *H,char e);
void InsList(Node *H,int i,char e);
int main()
{
Node *H;
int i,num;
char e;
printf("1.创建链表\n");
printf("2.查找\n");
printf("3.删除\n");
printf("4.插入\n");
printf("5.输出链表\n");
printf("请输入:");
while (scanf("%d",&num)!=EOF)
{
getchar();
if(num==1)
{
InitList(&H);
CreatList(H);
}
else if(num==2)
{
printf("请输入需要查找的元素:");
scanf("%c",&e);
SearchList(H,e);
}
else if(num==3)
{
printf("请输入需要删除的元素:");
scanf("%c",&e);
DelList(H,e);
}
else if(num==4)
{
printf("请输入需要插入的元素:");
scanf("%c",&e);
printf("请输入需要插入元素的位置:");
scanf("%d",&i);
InsList(H,i,e);
}
else if(num==5)
{
putList(H);
}
else printf("错误!\n");
printf("1.创建链表\n");
printf("2.查找\n");
printf("3.删除\n");
printf("4.插入\n");
printf("5.输出链表\n");
printf("请输入:");
}
return 0;
}
void InitList(Node **H) //初始化
{
*H=(Node *)malloc(sizeof(Node));
(*H)->next=NULL;
}
void CreatList(Node *H) //创建
{
char c;
Node *End=NULL,*L=NULL;
End=H;
int flag=1;
while(flag)
{
scanf("%c",&c);
getchar();
if(c!='s')
{
L=(Node *)malloc(sizeof(Node));
L->data=c;
End->next=L;
End=L;
}
else
{
End->next=NULL;
flag=0;
}
}
}
void SearchList(Node *H,char e) //查找
{
int flag=1;
Node *p=NULL;
p=H->next;
while(flag)
{
if(p->data==e)
{
printf("有此元素\n");
flag=0;
}
else if (p->next==NULL)
{
printf("无此元素\n");
flag=0;
}
else p=p->next;
}
}
void DelList(Node *H,char e) //删除
{
int flag=1;
Node *o=NULL,*p=NULL,*q=NULL;
q=H->next;
while (flag)
{
if (q->data!=e)
{
q=q->next;
}
if(q->next==NULL)
{
printf("无此元素\n");
flag=0;
}
if(q->data==e)
{
break;
}
}
p=q;
q=H;
while(q->next!=p)
{
q=q->next;
}
q->next=q->next->next;
free(p);
}
void InsList(Node *H,int i,char e) //插入
{
int j=0;
Node *p=NULL,*q=NULL,*o=NULL;
p=H;
q=H;
o=(Node *)malloc(sizeof(Node));
o->data=e;
while(j!=i-1)
{
p=p->next;
j++;
}
o->next=p->next;
p->next=o;
}
void putList(Node *H) //输出
{
Node *p=NULL;
p=H->next;
while(p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
}
全部回答
- 1楼网友:玩家
- 2021-02-11 02:58
你说的不是很清楚
#include<iostream>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
typedef struct Node node,*qnode;
qnode CreateList(void);
void PrintList(qnode a);
qnode DelList(qnode a);
void main(void)
{
qnode a=CreateList();
PrintList(a);
a=DelList(a);
PrintList(a);
}
qnode DelList(qnode a)
{
qnode b;
while(a)
{
b=a;
a=a->next;
free(b);
}
return NULL;
}
void PrintList(qnode a)
{
while(a)
{
printf("%d\t",a->data);
a=a->next;
}
}
qnode CreateList(void)
{
qnode s,h,end;
int bo=0;
char str[100];
h=NULL;
while(1)
{
s=(qnode)malloc(sizeof(node));
scanf("%s",str);
if(!sscanf(str,"%d",&s->data))
break;
s->next=NULL;
if(!bo)
{
bo++;
h=s;
end=s;
}
else
{
end->next=s;//尾插
end=s;
}
}
return h;
}
- 2楼网友:举杯邀酒敬孤独
- 2021-02-11 01:20
头插发,在链表头部插入一个结点,修改新插入的结点,使其指针部分指向原链表的头部。尾插法,修改原链表的最后一个结点,使其指向新插入的结点。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯