数据结构单链表

折磨了我三天的单链表今天晚上给它完成了,莫名的舒心。代码实现单链表的定义和创建,给单链表赋值求其长度、给任意的序号或者元素值寻找元素值或者序号。写完程序代码的第一感觉就是代码需要经常写,不写就更加不会写,hhhh

#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct node{
DataType data;
struct node *link;
} LinkNode, *LinkList;

void printList(LinkNode*first){
if(first==NULL) return;
printf("%d\n",first->data);
printList(first->link);
} ;
//尾插发建立一个单链表
void clearListRear (LinkList &last, DataType endTag){
DataType val;
printf("请输入结点元素:");
scanf("%d",&val);
if(val==endTag)
last=NULL;
else {
last = (LinkNode*) malloc (sizeof (LinkList));//创建头结点
if(!last) {
printf("存储分配错误!\n");
exit(1);
}
last->data=val;
clearListRear (last->link, endTag);
}
}
int Length(LinkList &first){
//计算表的长度,函数返回表的长度
LinkNode*p=first->link;
int count=0;
while (p!=NULL){
p=p->link;
count++;
}
printf("单链表的长度:%d",count);
};
LinkNode *Locate (LinkList &first ,DataType i){
//任意给一个序号的元素值
if(i<0) return 0;
LinkNode *p=first->link;
int k=1;
while(p!=NULL&&k<i){
p=p->link;
k++;
}
printf("对应的data值为:%d",p->data);
}
LinkNode *Search (LinkList &first ,DataType x){
//任意给定一个元素值找序号
LinkNode *p=first->link;
int a=1;
while(p!=NULL&& p->data!=x){
p=p->link;
a++;
}
printf("对应的序号为:%d",a);
}
main(){
int i;
int x;
LinkList L;DataType endTag;
printf("请输入约定的输入结束标志:");
scanf("%d",&endTag);
L=(LinkNode*)malloc(sizeof(LinkNode));//创建头结点
if(!L){
printf("储存分配错误!\n");
exit(1);
}
LinkNode*rear=L; //尾指针,初始时指向头结点
clearListRear(rear->link, endTag); //递归建立单链表
printList(L->link); //以下一结点为表头继续输出
Length(L);
printf("\n任意给定一个元素的序号:");
scanf("%d",&i);
Locate(L,i);
printf("\n任意给定一个元素的值:");
scanf("%d",&x);
Search(L,x);

}

posted @ 2019-04-11 23:42  吕志琪  阅读(150)  评论(0编辑  收藏  举报