数据结构之链表

来源:互联网 发布:数据库查找通配符 编辑:程序博客网 时间:2024/06/15 00:01


            头结点:第一个有效结点之前的那个结点; 头结点并不存有效数据;加头结点的目的主要是为了方便对链表的操作

            头指针:指向头结点的指针变量

            尾指针:指向尾节点的指针变量

            如果希望通过一个函数对链表进行处理,只需要一个参数:头指针

            首先要定义一个单链表存储结构

          

             然后建立一个空表,即初始化,我写的这个提前设置好了一个首结点和尾结点

             

             向链表中插入元素,我直接进行了有序的插入,大致的想法就是新插入结点的值和已经插入的进行比较,若新插入结点的值小,则插入其中;若相等,则不插入;若大于,则指针向下一位移动。

             

       

            搜索和删除功能在别的代码中测试成功,这代码没有体现出来

</pre></p><p></p><pre name="code" class="plain">#include<stdio.h>#include<stdlib.h>typedef struct linknode{int element;struct linknode* next;}LinkNode,*LinkPtr;LinkPtr initializeLinkList();LinkPtr createLinkList(int *paraArray, int arrayLength);void insertToNode(LinkPtr parahead, int paraElement);void printLinkList(LinkPtr parahead);int deleteNode(LinkPtr parahead, int val);int searchNode(LinkPtr parahead, int find);void testLinkList();//插入结点void insertToNode(LinkPtr parahead, int paraElement){LinkPtr p, q, r;                  //p代表前驱结点,q代表后继结点,r代表新插入结点p = parahead;q = parahead->next;printf("insert to list\n");r = (LinkPtr)malloc(sizeof(LinkNode));r->element = paraElement;r->next = NULL;while (q != NULL){if ((q->element) > (r->element)){r->next = q;p->next = r;break;}else if ((q->element) == (r->element)){free(r);break;}else{p = q;q = p->next;}}printf("insert success\n");printLinkList(parahead);}//初始化链表LinkPtr initializeLinkList(){LinkPtr head, tail;head = (LinkPtr)malloc(sizeof(LinkNode));tail = (LinkPtr)malloc(sizeof(LinkNode));head->element = -65535;tail->element = 65535;tail->next = NULL;head->next = tail;return head;}//创建链表LinkPtr createLinkList(int *paraArray, int arrayLength){LinkPtr head = initializeLinkList();printf("initializeLinkList success\r\n");printLinkList(head);printf("\n");int i;for (i = 0; i < arrayLength; i++){insertToNode(head, paraArray[i]);printf("\n");}return head;}//打印链表void printLinkList(LinkPtr parahead){LinkPtr head = parahead;while (head != NULL){printf("%d ", head->element);head = head->next;}}//删除结点int deleteNode(LinkPtr parahead, int val){int num = 1;LinkPtr  p = parahead;while ((p != NULL) && (num < val)){p = p->next;num++;}if ((p != NULL)&&(num==val)){LinkPtr r = p->next;p->next = r->next;free(r);return 1;}else{printf("NOT FOUND");return 0;}}//查找结点int searchNode(LinkPtr parahead, int find){LinkPtr p = parahead;int i = 1;while ((p != NULL) && (i < find)){p = p->next;i++;}if ((p != NULL) && (i == find)){return p->element;}return 0;}void testLinkList(){int tempArray[] = { 5, 7, 5, 8, 3 };LinkPtr tempList = createLinkList(tempArray, 5);}void main(){testLinkList();}


0 0