单链表

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

  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 }

 

 

上一篇:线性表的链式存储结构——链表


下一篇:数据结构-栈2-链式存储