阅读背景:

单链表的初始化,插入删除等操作_alvin的博客

来源:互联网 
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define error -1

typedef struct node
{
    char data[10];
    struct node *next;
}node,*LinkList;

node *ListCreate(int n)//建立单链表,该单链表有头结点
{
    //node *p,*h,*s;
    LinkList p,h,s;
    h = (LinkList)malloc(sizeof(node));
    h->next = NULL;
    p = h;
    for(int i=0;i<n;i++)
    {
        s = (LinkList)malloc(sizeof(node));
        scanf("%s",s->data);
        //s->data = "lv";
        p->next = s;
        s->next = NULL;
        p = s;
    }
    return h;
}

int DispList(LinkList h)//输出单链表
{
  LinkList p = h->next;
  while(p != NULL)
  {
     printf("\n%s ",p->data);
     p = p->next;
   }
  getchar();
  return 1;
}

int length(LinkList &h)//单链表的测长,h前为什么加不加&都可以,可能是引用的问题????
{
   int n=0;
   LinkList p = h;
   while(p->next!=NULL)
   {
      p = p->next;
      n++;
   }
   return n;
}

int ListDelete(LinkList &h,int i)//删除单链表中的某个结点
{
   LinkList p = h,q;
   int j=0;
   while(p->next!=NULL && j<i-1 )
   {
      p = p->next;
      j++;
   }
   
   if((p->next)==NULL || j>i-1)  return error;
 
   q = p->next;
   p->next = q->next;
   free(q);
   
   return 1;
}

int ListInsert(LinkList &h,int i)//在带头结点的单链表L中第i个位置之前插入元素
{
   LinkList p=h,s,q;
   int j=0;
   while(p && j<i-1)
   {
     p = p->next;
     j++;
   }
   if(!p || j>i-1) return error;//i小于1或大于表长加1
   s = (LinkList)malloc(sizeof(node));
   printf("\n插入的元素");
   scanf("%s",s->data);
   
   s->next = p->next;
   p->next = s;

   return 1;
}



int main()
{
    int num=4;
    int len;
    //node *head;
    LinkList head;
    head = ListCreate(num);//建立单链表
    printf("\n建立的单链表:");
    DispList(head);//单链表打印

    len = length(head);//单链表测长
    printf("\n单链表的长度:");
    printf("\n%d",len);
    
    
    ListDelete(head,2);
    printf("\n删除某一结点后的单链表:");
    DispList(head);
    
    
    ListInsert(head,4);
    printf("\n插入某一结点后的单链表:");
    DispList(head);
    getchar();
    return 0;

}#include<stdio.h>
#include<malloc.h>
#include<s



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: