ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

链表的基本操作

2020-02-26 17:05:15  阅读:201  来源: 互联网

标签:node pre head insert next 链表 基本操作 delete


链表是数据结构中一种最基本的数据结构,它是用链式存储结构实现的线性表。它较顺序表而言在插入和删除时不必移动其后的元素。现在给你一些整数,然后会频繁地插入和删除其中的某些元素,会在其中某些时候让你查找某个元素或者输出当前链表中所有的元素。
Input
输入数据只有一组,第一行有n+1个整数,第一个整数是这行余下的整数数目n,后面是n个整数。这一行整数是用来初始化列表的,并且输入的顺序与列表中的顺序相反,也就是说如果列表中是1、2、3那么输入的顺序是3、2、1。 第二行有一个整数m,代表下面还有m行。每行有一个字符串,字是“get”,“insert”,“delete”,“show”中的一种。如果是“get”或者“delete”,则其后跟着一个整数a,代表获得或者删除第a个元素;如果是“insert”,则其后跟着两个整数a和e,代表在第a个位置前面插入e;“show”之后没有整数。
Output
如果获取成功,则输出该元素;如果删除成功则输出“delete OK”;如果获取失败或者删除失败,则输出“get fail”以及“delete fail”。如果插入成功则输出“insert OK”,否则输出“insert fail”。如果是“show”则输出列表中的所有元素,如果列表是空的,则输出“Link list is empty”。注:所有的双引号均不输出。
Sample Input
3 3 2 1
21
show
delete 1
show
delete 2
show
delete 1
show
delete 2
insert 2 5
show
insert 1 5
show
insert 1 7
show
insert 2 5
show
insert 3 6
show
insert 1 8
show
get 2
Sample Output
1 2 3
delete OK
2 3
delete OK
2
delete OK
Link list is empty
delete fail
insert fail
Link list is empty
insert OK
5
insert OK
7 5
insert OK
7 5 5
insert OK
7 5 6 5
insert OK
8 7 5 6 5
7

在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct list{
 int data;
 struct list *next;
}node;
void Greatlist(node *head,int n)
{
 node *p;
 int num;
 while(n--)
 {
  scanf("%d",&num);
  p = (node *)malloc(sizeof(node));
  p->data = num;
  p->next = head->next;
  head->next = p;
 }
}
void output(node *head)
{
 node *p = head->next;
 if(!p)
 {
  printf("Link list is empty");
 }
 while(p != NULL)
 {
  printf("%d ",p->data);
  p = p->next;
 }
 printf("\n");
}
void deletelist(node *head,int n,int *e)
{
 if(n < 1)
 {
  printf("delete fail\n");
  return;
 }
 int j = 0;
 node *p,*pre = head;
 while(pre&&j < n - 1)
 {
  pre = pre->next;
  if(!pre)
  {
   printf("delete fail\n");
   return;
  }
  ++j;
 }
 p = (node *)malloc(sizeof(node));
 p = pre->next;
 pre->next = p->next;
 *e = p->data; 
 free(p);
 printf("delete OK\n");
}
void insertlist(node *head,int d,int dd)
{
 if(d < 1)
 {
  printf("insert fail\n");
  return;
 }
 int j = 0;
 node *p,*pre = head;
 while(pre&&j < d - 1)
 {
  pre = pre->next;
  if(!pre)
  {
   printf("insert fail\n");
   return;
  }
  j++;
 }
 p = (node *)malloc(sizeof(node));
 p->data = dd;
 p->next = pre->next;
 pre->next = p;
 printf("insert OK\n");
}
void getlist(node *head,int d)
{
 int j = 0;
 node *p,*pre = head;
 while(pre&&j < d - 1)
 {
  pre = pre->next;
  ++j;
 }
 p = (node *)malloc(sizeof(node));
 p = pre->next;
 printf("%d\n",p->data);
}
int main(void)
{
 int i,num,site,n,m,e;
 node *head;
 head = (node *)malloc(sizeof(node));
 head->next = NULL;
 scanf("%d",&n);
 Greatlist(head,n);
 scanf("%d",&m);
 while(m--)
 {
  int b,bb;
  char s[15];
  scanf("%s",s);
  if(!strcmp(s,"show"))
  {
   output(head);
  }
  else if(!strcmp(s,"delete"))
  {
   scanf("%d",&b);
   deletelist(head,b,&e);
  }
  else if(!strcmp(s,"insert"))
  {
   scanf("%d%d",&b,&bb);
   insertlist(head,b,bb);
  }
  else if(!strcmp(s,"get"))
  {
   scanf("%d",&b);
   getlist(head,b);
  }
 }
 return 0;
}
一条河可以 发布了140 篇原创文章 · 获赞 44 · 访问量 3909 私信 关注

标签:node,pre,head,insert,next,链表,基本操作,delete
来源: https://blog.csdn.net/weixin_45949073/article/details/104520216

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有