永发信息网

尾插法建链表

答案:3  悬赏:10  手机版
解决时间 2021-02-11 23:17
  • 提问者网友:富士山上尢
  • 2021-02-10 22:17
1 结构体
typedef struct Node
{
int data;
struct Node *next;
}Node;
2链表名字:*s,链表头指针*H,链表尾指针*End;
三个函数 主函数 头结点先为空的函数 和建立链表函数.

然后我会对相关的语句提问题...答完追加

谢谢了.
可以以输入数据c=getchar() 来使链表结束.
最佳答案
  • 五星知识达人网友: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;
}
}
全部回答
  • 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
头插发,在链表头部插入一个结点,修改新插入的结点,使其指针部分指向原链表的头部。尾插法,修改原链表的最后一个结点,使其指向新插入的结点。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯