C-链表


上图为效果图

#include <stdio.h>

#include <stdlib.h>
#include <malloc.h>
typedef  struct  Node
 {      int   data;
        struct  Node  *next;
 } SLIST;
 void inlist(SLIST *l,int a)
 {
   SLIST *p,*q;
   int i;
   p=(SLIST *)malloc(sizeof(SLIST));
   l->next=p;
    for(i=a;i>0;--i)
	{
		q=(SLIST *)malloc(sizeof(SLIST));
	       	printf("请输入数字\n");
			scanf("%d",&p->data);
		p->next=q;                                           /*这儿看看*/
		p=q;
	}
    q->next=NULL;
 }
 void Inset(SLIST *l,int i,int e)
{
	 SLIST *p,*s;
	 int j;
     p=l;
	 j=0;
   while(p&&j<i-1)
   {
	   p=p->next;
	             
	    s=(SLIST *)malloc(sizeof(SLIST));
	    s->data=e;
	    s->next=p->next;                                    /*这儿看看 链表的插入*/
	    p->next=s;
   }
}
void OutputList(SLIST *h)
{    SLIST  *p;
      p=h->next;
      if(p==NULL)     printf("The list is NULL!\n");
      else
      {     printf("Head");
            while((p->next)!=NULL)
            {      printf("->%d",p->data);
                    p=p->next;
             }
             printf("->End\n");
      }
}


void Delete(SLIST *l,int i)
{
    SLIST *p;
   int j;
     p=l;
	 j=0;
	 while(p->next&&j<i-1)
	 {
		 p=p->next;
		 ++j;
		 p->next=p->next->next;
	 }
}
int main()
{
     SLIST *h;
	 int i,j,k,m,n;
	 h= (SLIST *)malloc(sizeof(SLIST));
	 printf("输入要求的长度\n");
	 scanf("%d",&i);
 	 inlist(h, i);
 	  OutputList(h);
 	 printf("输入数字,1代表删除,2代表插入\n");
 	 scanf("%d",&n);
 	 while(n!=1||n!=2)
 	 {
 	     if(n==1)
        {
            printf("输入删除的位置\n");
 	        scanf("%d",&j);
 	        Delete(h,j);
 	        OutputList(h);
        }
 	    else if(n==2)
 	    {
 	        printf("输入插入的位置与值\n");
 	        scanf("%d%d",&k,&m);
 	        Inset(h,k,m);
 	         OutputList(h);
 	    }
 	     printf("再次输入数字,1代表删除,2代表插入\n");
 	        scanf("%d",&n);
 	 }
     OutputList(h);
	  return 0;
}

猜你喜欢

转载自blog.csdn.net/sheyun1876/article/details/80582326
C-