单链表的基本操作 程序实现
谁帮帮忙,实现/*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);
} 展开
/* 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);
} 展开
1个回答
展开全部
#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);
}
给你一个我的程序,大家一起进步!!!祝你学习快乐!!!
#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 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询