标签:class 完整 logs 删除节点 插入 blog status rand 学习
最近看了一小部分《大话数据结构》对链表的部分有了更深刻的认识,这本书真的挺不错,很能吸引读者,不会枯燥。链表部分,之前有过学习,但并没有深入,当时还感觉链表也就那么回事,做题时有个插入节点的,当时想法是对的,但细节有问题,因而一直没能做成功。
进行插入操作时,我当时想法是这样的(伪代码):
这部分是差不多的,但是是错误的。
其他的删除节点、获取某节点上的元素什么的都比较简单,也就不用细究了。
最后附上自己学习这部分后完整实现创建链表、插入节点、删除节点、获取某节点元素的代码(因为书上好像没有完整的代码,只有部分功能片段代码)
代码如下:
#include <stdio.h> #include <time.h> #include <conio.h> #include <stdlib.h> #define INITIA 5 typedef int ElemType; typedef int Status; typedef struct Node { ElemType data; struct Node * next; }node; node * head = NULL, *p, *q; Status GetElem(); Status LinkListInsert(); Status LinkListDelete(); //获取某个地址的元素 Status GetElem(int i, ElemType e) { int j; p = head; j = 1; while(p && j < i) { p = p -> next; ++j; } if(!p || j > i) return 0; e = p -> data; printf("%d",p -> data); return 1; } //向链表某位置插入节点 Status LinkListInsert(int i) { int j; node * s; p = head; j = 1; while(p && j < i) { p = p ->next; ++j; } if(!p || j > i) return 0; s = ( node * ) malloc ( sizeof ( node ) ); s -> data = rand()%100 + 1; s ->next = p -> next, p -> next = s ; return 1; } //删除链表某节点 Status LinkListDelete(int i, ElemType e) { int j; node * s; p = head; j = 1; while(p && j < i - 1) //这里书中是 j < i,这样写会有什么变化,感兴趣的可以自己改一下试试 { p = p -> next; ++j; } if(!p || j > i) return 0; s = p -> next; p -> next = p -> next -> next; e = s -> data; free(s); return 1; } int main() { char str; int i; ElemType e = 0; srand ( time( 0 ) ); for(i = 0; i < INITIA; i ++) { p = ( node * ) malloc ( sizeof ( node ) ); if(head == NULL) head = p; else q ->next = p; p -> next = NULL; p -> data = rand()%100 + 1; q = p; } p = head; while(p) { printf("%d ",p -> data); p = p -> next; } printf("\n查找 请按 1 插入数据 请按 2 删除数据 请按 3"); str = getch(); if(str == ‘1‘) { printf("\n请输入要查找的数的位置:"); scanf("要查找的数为:%d\n",&i); GetElem(i, e); } if(str == ‘2‘) { printf("\n请输入要插入的数的位置:"); //插在原本该位置上数据的后一位
scanf("%d",&i); LinkListInsert(i); p = head; while(p) { printf("%d ",p -> data); p = p -> next; } } if(str == ‘3‘) { printf("\n请输入要删除的数的位置:"); scanf("%d",&i); LinkListDelete(i, e); p = head; while(p) { printf("%d ",p -> data); p = p -> next; } } return 0; }
标签:class 完整 logs 删除节点 插入 blog status rand 学习
原文地址:http://www.cnblogs.com/darkchii/p/7278939.html