您的位置:首页 > 理论基础 > 数据结构算法

【数据结构-链表】头插法和尾插法建立单链表

2015-03-19 12:47 337 查看
//尾插法比较常用,尾插法需要利用一个头结点。

//头插法不需要头结点,但是需要一个空指针。

#include<stdio.h>

#include<stdlib.h>

typedef struct node

{

char data;

struct node *next;

}LinkList;

LinkList* Create_Front();//头插法建立单链表

LinkList* Create_End();//尾插法建立单链表

void ShowLinkList(LinkList* h);//显示单链表

//printf("单链表显示\n");

//ShowLinkList(head);

之前对头插法的理解有些偏差,这里做一下更正。






这里的头结点并不是开始使得head=NULL,而是head->next=NULL,然后在添加数值的过程中,head这个头结点是一直向前移动的。

LinkList* Create_Front()

{

LinkList* head1, *p;

char ch;

head1
->next= NULL;

printf("输入数据直到输入‘#’结束\n");

while ((ch = getchar()) != '#')

{

p = (LinkList*)malloc(sizeof(LinkList));

p->data = ch;

p->next = head1->next;//头插法就这个还有head=p是核心,但是头插法数据是逆序的。头插法不需要头结点,只需要一个空指针。

head1->next
= p;

}

return head1->next;

}

LinkList* Create_End()

{

LinkList* head2, *e, *p;

char ch;

head2 = (LinkList*)malloc(sizeof(LinkList));

e = head2;

printf("输入数据直到输入‘#’结束\n");

while ((ch = getchar()) != '#')

{

p = (LinkList*)malloc(sizeof(LinkList));

p->data = ch;

e->next = p;//e指向输入的下一个节点

e = p;

}

e->next = NULL;

return head2->next;//尾插法比头插法多了一个新的指针e

}

void ShowLinkList(LinkList* h)

{

while (h->next != NULL)

{

printf("%c", h->data);

h = h->next;

}

printf("%c", h->data);

printf("\n");

}

int main(void)

{

LinkList* head;

head = Create_End();

ShowLinkList(head);

}

好吧我又把单链表的尾插法与删除插入放在一起做了一下。

#include<iostream>

using namespace std;

typedef struct Node

{

int data;

struct Node *next;

}*LinkList,LinkNode;

LinkList Create_End();

void printLinkList(LinkList &L);

void deleteLinkList(LinkList &L);

void AddLinkList(LinkList &L);

LinkList Create_End()

{

LinkNode *head, *e, *p;

int key;

e = new LinkNode;

printf("请输入您要插入的数据,以-123结束!\n");

scanf("%d", &key);

head = e;

while (key != -123)

{

p = new LinkNode;

p->data = key;

e->next = p;

e = p;

printf("请输入您要插入的数据,以-123结束!\n");

scanf("%d", &key);

}

e->next = NULL;

return head->next;

}

void deleteLinkList(LinkList &L)

{

printf("您要删除的数字是:");

int key;

scanf("%d", &key);

LinkList p,q;

p =L;

q = new LinkNode;

while (p->data != key)

{

q = p;

p = q->next;

}

q->next = p->next;

delete p;

}

void AddLinkList(LinkList &L)

{

LinkList p,newNode;

p = L;

printf("您要插入的位置是:");

int place;

scanf("%d", &place);

printf("您要插入的数是:");

int elem;

scanf("%d", &elem);

int i = 1;

while (i != place-1)

{

p = p->next;

i++;

}

newNode = new LinkNode;

newNode->data = elem;

newNode->next = p->next;

p->next = newNode;

}

void printLinkList(LinkList &L)

{

LinkList p = L;

while (p->next != NULL)

{

printf("%d->", p->data);

p = p->next;

}

printf("%d", p->data);

}

int main(void)

{

LinkList L;

L=Create_End();

printLinkList(L);

deleteLinkList(L);

printLinkList(L);

AddLinkList(L);

printLinkList(L);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐