单链表的基本操作 程序实现

谁帮帮忙,实现/*Note:YourchoiceisCIDE*/#include"stdio.h"#include"stdlib.h"/*1.链表的建立CreateLis... 谁帮帮忙,实现

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"

/*
1.链表的建立 CreateList()
2.结点查找 FindNode()
3.结点增加 InsertList()
4.结点删除 Delete()
5.单链表的反转等 NiZList()
6.显示数据 Display()
*/

struct List
{
int data;
struct List *next;
};
typedef struct List Node;
typedef Node *Link;

//链表的建立
Link CreateList(Link H)
{
int i,data;
H=(Link)malloc(sizeof(Node));
if(!H)
{
printf("内存分配失败!");
return NULL;
}
printf("请输入链表元素(4个)!\n");
for(i=1;i<5;i++)
{
Link newNode;

scanf("%d",&data);
newNode=(Link)malloc(sizeof(Node));
newNode->data=data;

newNode->next=H->next;
H->next=newNode;
}
return H;
}
//显示数据
void Display(Link H)
{
Link p;
p=H->next;
while(p)
{
printf(" [%d]",p->data);
p=p->next;
}
printf("\n");

}
//链表按位置查找
int FindNode(Link H,int i)
{
int j=0;
Link p;
p=H->next;
printf("您查找的位置为;\n");
scanf("%d",&i);
while((p->next)&&(j<i))
{
p=p->next;
j++;
}
if(!p)
return 0;
else
printf("第%d个位置的值为%d!",i,p->data);
}
//链表的增加
Link InsertList( Link H,int y,int x)
{

Node *pre,*p,*s;
#define New (Link)malloc(sizeof(Node))
s=New;
s->data=x;
pre=H;
p=pre->next;
printf("\n请输入要在链表的哪个值(y)前插入什么值(x):\n");
scanf("%d,%d",&y,&x);
while(p&&p->data!=y)
{
pre=p;
p=p->next;
}
if(p==NULL)
{
printf("error!%d不在该链表中\n",y);

}

else
{
s=(Node*)malloc(sizeof(Node));
s->data=x;
s->next=p;
pre->next=s;
printf("\n");
printf("插入后的链表结果如下:\n");
Display(H);
}
}
//链表的删除
Link Delete(Link H,int i)
{
Link *p=H,*s;
int j=1;
printf("请输入要删除位置:\n");
scanf("%d",&i);
while(j<i)
{
H=H->next;
j++;
}
free(p);
if(j==i)
{
H=H->next;
free(p);
}

else
printf("删除位置有误!\n");
Display(H);

}

//单链表的反转
Link NizList(Link H)
{
Link pprev,pnext,pcur;
pprev=H;
pcur=pprev->next;
while(pcur!=0)
{
pnext=pcur->next;
pcur->next=pprev;
pprev=pcur;
pcur=pnext;
}

Display(H);

}

void main()
{
int x,y,i;
Link H=NULL;
H=CreateList(H);
Display(H);

FindNode(H,i);
InsertList(H,y,x);
Delete(H,i);

}
展开
 我来答
zfpp25
推荐于2016-05-25 · TA获得超过345个赞
知道小有建树答主
回答量:133
采纳率:0%
帮助的人:146万
展开全部
#include <stdio.h>
#include <stdlib.h>

struct node
{
int num;
struct node *next;
};
/*建立链表*/
struct node *creat(int n)
{
int x, i;
struct node *head, *p, *r;

head=(struct node*)malloc(sizeof(struct node));
r=head;
printf("请输入数字\r\n");
for(i=0; i<n; i++)
{
scanf("%d", &x);
p=(struct node*)malloc(sizeof(struct node));
p->num=x;
r->next=p;
r=p;
}
r->next=NULL;
return(head);
}
/*删除重复结点*/
void delet(struct node *head)
{
struct node *p, *q, *r;

p=head->next;
while(p!=NULL)
{
q=p;
while(q->next!=NULL)
{
r=q->next;
if(r->num==p->num)
{
if(r->next!=NULL)
{
q->next=r->next;
free(r);
}
else
{
q->next=NULL;
free(r);
}
}
else
{
q=r;
}
}
p=p->next;
}
}
/*排序*/
void sort(struct node *head)
{
struct node *p, *q, *small;
int temp;

for(p=head->next; p->next!=NULL; p=p->next)
{
small=p;
for(q=p->next; q!=NULL ;q=q->next)
{
if(q->num<small->num)
small=q;
}
if(small!=p)
{
temp=small->num;
small->num=p->num;
p->num=temp;
}
}
}
/*输出*/
void output(struct node *head)
{
struct node *pt;
pt=head->next;
while(pt!=NULL)
{
printf("%d\r\n", pt->num);
pt=pt->next;
}
}
void destroy(Node* head)
{
while (head)
{
Node* temp = head;
head = head->pstnext;
free(temp);
}
}

main()
{
int n;
struct node *head;

printf("输入数字的个数n\r\n");
scanf("%d", &n);
head=creat(n);

printf("输入的数字\r\n");
output(head);

delet(head);
printf("删除重复结点后输出数字\r\n");
output(head);

sort(head);
printf("排序后输出数字\r\n");
output(head);

destroy(head);
}
给你一个我的程序,大家一起进步!!!祝你学习快乐!!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式