数据结构-链表操作(创建、输出、查找、插入、删除等) C语言源码

版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 https://blog.csdn.net/springhammer/article/details/88617783

数据结构-链表操作(创建、输出、查找、插入、删除等) C语言源码

#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct node
{
    datatype data;
    struct node *next;
}linklist;
linklist *head,*p;
//头插法建立单链表
linklist *Creatlistf()         
{
    char ch;                   
    linklist *head,*s;
    head=NULL;
    ch=getchar();
    printf("请输入顺序表元素(数据以*结束):\n");
    while(ch!='*')
    {
        s=(linklist *)malloc(sizeof(linklist));

        s->data=ch;
        s->next=head;
        head=s;
        ch=getchar();
    }
    return head;
}

//按序号查找结点
linklist *Get(linklist *head,int i)           
{
    int j;
    linklist *p;
    p=head;j=0;
    while((p->next!=NULL)&&(j<i))
    {
        p=p->next;
        j++;
    }
   
    if(i==j)
        return p;
}
//按值查找结点
linklist *Locate(linklist *head,datatype key)       
{
    int pos=0;
    p=head->next;
    printf("查找结点位置为:");
    while(p!=NULL)
    {
        if(p->data!=key)
        {
            p=p->next;
            pos++;
        }
        else
        {
            pos++;
            break;
        }
           
    }
        return p;
}

void Insertafter(linklist *p,datatype x)       
{
    linklist *s;
    s=(linklist *)malloc(sizeof(linklist));
    s->data=x;
    s->next=p->next;
    p->next=s;
    printf("插入成功");
}
//前插结点
void Insertbefore(linklist *p,datatype x)     
{
    linklist *s;


    s=(linklist *)malloc(sizeof(linklist));
    s->next=p->next;
    s->data = p->data;
    p->data=x;
    p->next=s;
}
//删除结点
linklist *Deleteafter(linklist *head)                 
{
    int i;
    linklist *r,*p;
    printf("请输入要删除的结点位置:");
    scanf("%d",&i);
    if(i==0){
    	printf("无该位置\n"); 
	}
	 else if(i==1)
    {
        r=head;
       
        head=head->next;
    }
    else
    {
        p=Get(head,i-1);
        r=p->next;
        p->next=r->next;
    }   
    free(r);
 
    return head;
}
//输出单链表
void output(linklist *p)                       
{
    while(p->next!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}
main()
{
  linklist *head;
  int k,i,pos;
  char x;
  datatype key;
  printf("单链表的操作:\n");
  printf("\t1.头插法建立单链表\n");
  printf("\t2.输出单链表\n");   
  printf("\t3.按序号查找结点\n");
  printf("\t4.按值查找结点\n");
  printf("\t5.前插结点\n");
  printf("\t6.删除结点\n"); 
  printf("\t7.退出\n");
  do
  { 

      printf("选择所需功能: ");
      scanf("%d",&k);
      switch(k)
      {
          case 1:head=Creatlistf();
                  break;
          case 2:printf("单链表为:\n");
                  output(head);
                  break;
    
          case 3:printf("请输入要查找的结点序号: ");
                  scanf("%d",&i);
                  getchar();
                  printf("结点的值为:%c\n",Get(head,i-1)->data);
                  break;
          case 4:printf("请输入要查找的结点值: ");
                  scanf("%c",&key);
                  getchar();
                  printf("%d",Locate(head,key));
                  printf("\n");
                  break;
          case 5:
		          printf("输入要插入的结点位置(从1号位开始插):");
                  scanf("%d",&pos);
                  if(pos==0)
                  {
                  	printf("无该位置\n");break; 
				  }
                  getchar();
                  printf("请输入插入的结点值:");
                  scanf("%c",&x);
                  getchar();
                  Insertbefore(Get(head,pos-1),x);
                  printf("插入成功\n");
                  break;
          case 6:
                  head=Deleteafter(head);
                
                  
                  break;
         
          case 7:printf("退出");
              exit(0);
            default:printf("输入错误\n");
              exit(0);
        }
    }while(1);
}

在这里插入图片描述
快看,这才是重点!我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。

但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。

好了,就酱紫。

老铁,这要是都不赞,说不过去吧!!!哦,对了,你这么好看,关注一下呗。。。

最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。

猜你喜欢

转载自blog.csdn.net/springhammer/article/details/88617783