链表的实现

来源:互联网 发布:交通事故数据 编辑:程序博客网 时间:2024/06/06 18:18

单链表的实现及其相关操作


#include <stdio.h>#include <malloc.h>typedef struct LNode{int data;struct LNode *next;}LNode, *LinkList;//*************************************************************************************/*LinkList CreateLinkList(LinkList &L) {//建立链式表//头插法LNode *s;int x;//输入的数据xL = (LinkList)malloc(sizeof(LNode));//创建头结点L->next = NULL;scanf("%d", &x);//读入数据xwhile(x != 9999) {//输入9999表示输入结束s = (LNode*)malloc(sizeof(LNode));//创建节点ss->data = x;s->next = L->next;L->next = s;scanf("%d", &x);}return L;}*///*************************************************************************************LinkList CreateLinkList(LinkList &L) {//建立链式表//尾插法LNode *s;LNode *r;//尾指针int x;L = (LinkList)malloc(sizeof(LNode));L->next = NULL;r = L;scanf("%d", &x);while(x !=9999) {s = (LNode*)malloc(sizeof(LNode));s->data = x;r->next = s;r = s;scanf("%d", &x);}r->next = NULL;return L;}//*************************************************************************************int Length(LinkList &L) {//求表长int i = 0;LNode *point = L->next;while(point != NULL) {//printf("count one\n");point = point->next;i++;}return i;}//*************************************************************************************LNode *LocateElem(LinkList &L, int elem) {//按值查找操作LNode *point = L->next;while(point->data != elem || point != NULL) {point = point->next;}return point;}//*************************************************************************************LNode *GetElem(LinkList &L, int seq) {//按序号查找操作LNode *point= L->next;if(seq < 1 || seq > Length(L)) {return NULL;;}else {for(int i=2; i<=seq; ++i) {point = point->next;}}return point;}//*************************************************************************************bool ListInsert(LinkList &L, int i, int elem) {//插入操作,按位置插入LNode *point = L->next;if(i < 1 || i > Length(L)) {return false;;}else {for(int j=2; j<i; j++) {point = point->next;}LNode *s = (LNode*)malloc(sizeof(LNode));s->data = elem;s->next = point->next;point->next = s;}return true;}//*************************************************************************************bool ListDelete(LinkList &L, int i) {//删除操作,按位置删除LNode *point = L->next;LNode *point2;if(i < 1 || i > Length(L)) {return false;}else {for(int j=2; j<i; j++) {point = point->next;}point2 = point->next;point->next = point2->next;free(point2);}return true;}//*************************************************************************************/*bool ListDelete(LinkList &L, int i) {//删除操作,按查找的值删除LNode *point = L->next;LNode *pre = L;LNode *point2;if(i < 1 || i > Length(L)) {return false;}else {while(point->data != i || point->next!= NULL) {pre = pre->next;point = point->next;}point2 = point;pre->next = point2->next;free(point2);}return true;}*///*************************************************************************************void PrintList(LinkList &L) {//输出操作LNode *point = L->next;while(point != NULL) {printf("%d\n", point->data);point = point->next;}}//*************************************************************************************bool EmptyList(LinkList &L) {//判空操作if(L->next != NULL) {return false;}return true;}//*************************************************************************************void DestroyList(LinkList &L) {//销毁操作}void DeleteNode(LinkList &list, int x) {LNode *p = list->next;LNode *pre = list;//被删除结点的前驱结点LNode *q; //数据为x的结点while(p =! NULL) {if(p->data == x) {q = p;p = p->next;pre->next = p;free(q);}else pre = p;p = p->next;}}//*************************************************************************************int main() {LinkList l;int x = 10;//LNode *point;CreateLinkList(l);printf("*****************************************\n");//PrintList(l);//printf("the amount of LinkList elements is %d\n", Length(l));//point = GetElem(l, 3);//ListDelete(l, 4);DeleteNode(l, 10);printf("*****************************************\n");PrintList(l);//if(point != NULL) {//printf("this element is %d\n", point->data);//}return 0;}


0 0
原创粉丝点击