数据与结构-单链表
#include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct node { ElemType date;//数据域 struct node *next;//指针域 }LNode,*LinkList; //用尾插法建立链表 LinkList Creat_LinkList1() { LinkList H,r,s; H=(LNode*)malloc(sizeof(LNode));//初始化链表 H->next=NULL; int x; r=H; printf("请输入数据作为结点用-1,暂停:\n"); scanf("%d",&x); while(x!=-1) { s=(LNode*)malloc(sizeof(LNode)); s->date=x; s->next=r->next; r->next=s; r=s; scanf("%d",&x);//-1表示结束生成子结点 } r->next=NULL; return H; } //单链表的查找 LinkList Get_LinkList(LinkList H,int k) { LinkList p=H; int j=0; while(p->next!=NULL&&j<k) { p=p->next; j++; } if(j==k) return p; else return NULL; //没找到,位置错误 } LinkList Get_LinkList1(LinkList H,int k) { LinkList p=H; int j=0; while(p->next!=NULL&&j<k) { p=p->next; j++; } if(j==k) return p->date; else return NULL; //链表的插入 } int Insert_LinkList(LinkList H,int i,ElemType x)//依次输入待插入的链表,插入位置,插入的元素 { LinkList p,s; p=Get_LinkList(H,i-1);//调用按值查找位置函数* if(p==NULL) { printf("插入位置错误!"); return -1;//返回-1表示输入位置错误 } else { s=(LinkList)malloc(sizeof(LNode)); s->date=x; s->next=p->next; p->next=s; return 1;//返回1表示插入成功 } } //删除节点元素 int Del_LinkList(LinkList H,int i) { LinkList p,q; p=Get_LinkList(H,i-1); q=p->next; p->next=q->next; free(q); return 1; } //判断表是否为空 int ListEmpty(LinkList H) { if(H->next==NULL) return -1; else return 1; } //计算表长 int length_LinkList(LinkList H) { LNode *p=H; int j=0; while(p->next!=NULL) { p=p->next; j++; } return j; } //清空表 LinkList ClearList(LinkList H) { H->next=NULL; } void output(LinkList H) { LinkList p; p=H->next; while(p!=NULL) { printf("%3d",p->date); p=p->next; } printf("\n"); } int main() { LinkList H1; int num,i,k; H1=Creat_LinkList1(); //初始化并且建立链表 output(H1); printf("请输入待插入数据的位置:\n"); scanf("%d",&i); printf("请输入待插入数据:\n"); scanf("%d",&k); Insert_LinkList(H1,i,k); output(H1); printf("请输入待删除的位置:\n"); scanf("%d",&i); Del_LinkList(H1,i); output(H1); printf("请输入待查找的位置:"); scanf("%d",&i); num=Get_LinkList1(H1,i); printf("该元素是:%d\n",num); printf("请输入你想取元素的位置:\n"); scanf("%d",&i); num=Get_LinkList1(H1,i); printf("这个元素的值为:%d\n",num); printf("判断表是否为空:\n"); num=ListEmpty(H1); printf("判断结果为%d,负数为空,正数为非空\n",num); num=length_LinkList(H1); printf("表长为:%d\n",num); ClearList(H1); printf("表已经被清空!\n"); num=length_LinkList(H1); printf("表长为:%d\n",num); }