单链表,创建单链表函数出了点问题导致程序报错。。
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 }