单链表实例1

来源:互联网 发布:uml画图软件 编辑:程序博客网 时间:2024/06/05 19:44
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef int DataType;typedef struct Node{DataType data;struct Node *next;}LinkNode, *LinkList;#include "LinkList.h"//删除A中出现B的元素的函数声明void DelElem(LinkList A, LinkList B);void main(){int i;DataType a[] = { 2, 3, 6, 7, 9, 14, 56, 45, 65, 67 };DataType b[] = { 3, 4, 7, 11, 34, 54, 45, 67 };LinkList A, B;LinkNode *p;InitList(&A);InitList(&B);//将数组a中的元素插入到单链表A中for (i = 1; i <= (sizeof(a) / sizeof(a[0])); i++){if (InsertList(A, i, a[i - 1]) == 0){printf("位置不合法");return;}}//将数组b中的元素插入到单链表B中for (i = 1; i <= (sizeof(b) / sizeof(b[0])); i++){if (InsertList(B, i, b[i - 1]) == 0){printf("位置不合法");return;}}printf("单链表A中元素有%d个:\n", ListLength(A));for (i = 1; i <= ListLength(A); i++){p = Get(A, i);if (p)printf("%4d", p->data);}printf("\n");printf("单链表B中元素有%d个:\n", ListLength(B));for (i = 1; i <= ListLength(B); i++){p = Get(B, i);if (p)printf("%4d", p->data);}printf("\n");DelElem(A, B);printf("将A中出现B的元素删除后,A中的元素还有%d个:\n", ListLength(A));for (i = 1; i <= ListLength(A); i++){p = Get(A , i);if (p)printf("%4d", p->data);}printf("\n");system("pause");}/*删除A中出现B的元素的函数实现*/void DelElem(LinkList A, LinkList B){int i, pos;DataType e;LinkNode *p;/*在单链表B中,取出每个元素与单链表A中的元素比较,如果相等,则删除A中元素对应的结点*/for (i = 1; i <= ListLength(B); i++){p = Get(B, i);      //取出B中的每个结点,将指针返回给pif (p){pos = LocatePos(A, p->data);//比较B中的元素是否与A中元素相等if (pos > 0)DeleteList(A, pos, &e);//如果相等,将其从A中删除}}}

0 0