头插法/尾插法建立线性链表

来源:互联网 发布:mysql 图片 编辑:程序博客网 时间:2024/05/20 19:47

头插法


#include <stdio.h>#include <stdlib.h>typedef char ElemType;typedef struct Node{ElemType data;struct Node *next;}Node, *LinkList;LinkList CreateFromHead(){LinkList L;Node *s;char c;int flag = 1;L = (LinkList)malloc(sizeof(Node));L->next = NULL;while(flag){c = getchar();if(c != '#'){s = (Node*)malloc(sizeof(Node));s->data = c;s->next = L->next;L->next = s;}else{flag = 0;}}return L;}int main(){LinkList L;Node *p;L = CreateFromHead();p = L->next;while(p != NULL){printf("%c\n",p->data);p = p->next;}return 0;}



尾插法


#include <stdio.h>#include <stdlib.h>typedef char ElemType;typedef struct Node{ElemType data;struct Node *next;}Node, *LinkList;LinkList CreateFromTail(){LinkList L;char c;Node *r, *s;int flag = 1;L = (Node*)malloc(sizeof(Node));L->next = NULL;r = L;while(flag){c = getchar();if(c != '#'){s = (Node *)malloc(sizeof(Node));s->data = c;r->next = s;r = s;}else{flag = 0;r->next = NULL;}}return L;}int main(){LinkList L;Node *p;L = CreateFromTail();p = L->next;while(p != NULL){printf("%c\n",p->data);p = p->next;}return 0;}

可以使用VLD检测内存泄漏问题:

https://vld.codeplex.com/

#include <iostream>#include <vld.h>using namespace std;#define MAX_LEN 100typedef struct Node{int data;Node *next;}Node, *PNode;//头插法void create1(PNode &l){Node *s = NULL;for (int i = 1; i <= 5; i++){s = new Node;s->data = i;s->next = l->next;l->next = s;}}//尾插法void create2(PNode &l){PNode tail = l;Node *s = NULL;for (int i = 1; i <= MAX_LEN; i++){s = new Node;s->data = i;s->next = NULL;tail->next = s;tail = s;}}void show(PNode &l){Node *p = l->next;while (p){cout << p->data << " ";p = p->next;}cout << endl;}void del1(PNode &l){while (l){Node *p = l->next;delete l;l = NULL;l = p;}}//递归void del2(PNode &l){if (l == NULL){return;}del2(l->next);delete(l);l = NULL;}int main(){PNode l = new Node;l->next = NULL;create2(l);show(l);del1(l);return 0;}


原创粉丝点击