单链表

Posted jjbbbb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表相关的知识,希望对你有一定的参考价值。

单链表,创建单链表函数出了点问题导致程序报错。。

  1 #include"stdio.h"
  2 #include"stdlib.h"
  3 typedef int DataType;
  4 typedef struct node
  5     DataType data;
  6     struct node *link;
  7 LinkNode,*LinkList;
  8 void initList(LinkList *first)
  9     (*first)=(LinkNode*)malloc (sizeof(LinkNode));
 10     if(!first)
 11         printf("存储分配错误!\n");
 12         exit(1);
 13     
 14     (*first)->link=NULL;
 15 
 16 void createListFront(LinkList *first,DataType endTag)
 17     DataType val;
 18     scanf("%d",&val);
 19     if(val==endTag)return;
 20     LinkNode *p=(LinkNode*)malloc(sizeof(LinkList));
 21     if(!p)exit(1);
 22     p->data=val;
 23     p->link=(*first)->link;
 24     (*first)->link=p;
 25     createListFront(first,endTag);
 26 
 27 int Length(LinkList *first)
 28     LinkNode *p=(*first)->link;
 29     int n=0;
 30     while(p!=NULL)
 31     p=p->link;
 32     n++;
 33     
 34     return n;
 35 
 36 LinkNode *Search(LinkList *first,DataType x)
 37     LinkNode *p=(*first)->link;
 38     while(p!=NULL&&p->data!=x)
 39         p=p->link;
 40         return p;
 41     
 42 
 43 LinkNode *Locate(LinkList *first,int i)
 44     int c;
 45     if(i<0)
 46     return NULL;
 47     LinkNode *p=(*first);
 48     int k=0;
 49     while(p!=NULL&&k<i)
 50     p=p->link;
 51     k++;
 52     
 53     printf("%d",p->data);
 54 
 55 int Insert(LinkList *first,DataType x,int i)
 56     LinkNode *p=Locate(first,i-1);
 57     if(p==NULL) return 0;
 58     LinkNode *q=(LinkNode*)malloc (sizeof(LinkNode));
 59     if(q==NULL)
 60     exit(1);
 61     q->data=x;
 62     q->link=p->link;
 63     p->link=q;
 64     return 1;
 65 
 66 int Remove(LinkList *first,int i,DataType&x)
 67     LinkNode *p=Locate(first,i-1);
 68     if(p==NULL||p->link==NULL)return 0;
 69     LinkNode *q=p->link;
 70     p->link=q->link;
 71     x=q->data;
 72     free(q);
 73 
 74 int printList(LinkList *first) 
 75     LinkNode *p=(*first)->link;//p指向第一个节点;;
 76     int i = 0;
 77     printf("打印整个链表\n");
 78     if (p==NULL) 
 79         printf("这是一个空链表.\n");
 80     
 81     while(p)
 82         i++;
 83         printf("第%d个节点的数据data为=%d\n",i,p->data);
 84         p=p->link;
 85     
 86     return 1;
 87 
 88 main()
 89     LinkList *first;
 90     DataType endTag;
 91     (*first)=(LinkNode*)malloc (sizeof(LinkNode));
 92     if(!first)
 93         printf("存储分配错误!\n");
 94         exit(1);
 95     
 96     scanf("$d",&endTag);
 97     (*first)->link=NULL;
 98     createListFront(first,endTag);
 99     printList(first);
100     int x;
101     printf("请输入要查找的元素: ");
102     scanf("%d",&x);
103     Search(first,x);
104     int c,i;
105     printf("请输入需要定位的元素位置: ");
106     scanf("%d",&c);
107     scanf("%d",&i);
108     Locate(first,i);
109     int b,j;
110     printf("请输入插入元素的位置和值: ");
111     scanf("%d",&b);
112     scanf("%d",&j);
113     Insert(first,b,j);
114     int d1,d2;
115     printf("请输入要删除的元素值及位置: ");
116     scanf("%d",&d1);
117     scanf("%d",&d2);
118     Remove(first,d1,d2);
119 

 

 

以上是关于单链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构代码(用C语言) 单链表的插入和删除

单链表

数据结构--单链表简单代码实现(总结)

单链表逆置

循环链表(循环单链表循环双链表)的相关操作的代码实现(C语言)

单链表反转java代码