采用c语言数据结构实现链表和stl 分别实现链表
2018-03-26 20:04
417 查看
数据结构和c++中都有链表操作,以前学习时候总感觉马马虎虎都掌握了但是不踏实,现在有时间采用对比方式分别实现链表操作以及一些常用的函数实现,话不多说直接代码。
c语言实现:
#includes<stdio.h>
#includes<stdlib.h>
typedef struct NODE
{
int data;
struct Node *next;
}NODE,*PNODE;
//创建一个链表
PNODE createList(){
int val, n;
PNODE pHead=(PNODE)malloc(sizeof(NODE));
PNODE pTail=pHead;
pHead->next=NULL;
printf("请输入链表长度\n");
scanf("%d",&n);
//初始化链表
for(int i=0;i<n;i++){
printf("请输入第%d个数值\n",i+1);//循环第一次执行时候我们我们插入的是第一个节点
scanf("%d",&val);
PNODE Pnew=(PNODE)malloc(sizeof(NODE));
Pnew->data=val;
pTail->next=Pnew;
pTail=Pnew;
Pnew->next=NULL;
}
return pHead;//返回值这个有待理解?
}
//判断链表是否为空,基本思想就是头指针指向的下一个地址是否为空。
int isEmpty(PNODE pHead){
if(pHead->next=NULL){
return 1;
}else{
return 0;
}
}
//遍历一个链表 输出元素
void TraverseList(PNODE pHead){
if(isEmpty(pHead)){
printf("链表为空");
}
else{
PNODE p=pHead->next; //头指针的下一位才有数据域
while(p!=NULL){
printf("%d",p->data);
p=p->next;//不断向下寻找
}
}
}
//删除一个元素
void DeleteList(PNODE pHead,int pos){
if(isEmpty(pHead)){
printf("链表为空");
}
PNODE p=pHead->next;
int i=2;
while(p!=NULL&&i!=pos){
p=p->next;
i++;
}
PNODE q=p->next;
p->next=q->next;
free(q);
}
//插入一个元素
void Insert(PNODE pHead,int pos,int e){
PNODE p,q;
p=pHead->next;
int j=0;
while(p!=NULL&&j<pos-1){
if(j==pos-1){
q=(PNODE)malloc(sizeof(NODE));
q->data=e;
q->next=p->next;
p-next=q;
}
j++;
p=p->next;
}
}//没有加入空间大小查询
int main(){
PNODE pHead=createList();
TraverseList(pHead);
DeleteList(pHead,5);
Insert(pHead,4,8);
return 0;
}
c++实现比c语言简洁多了
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
int main(){
//定义一个链表,采用插入法初始化 初始化方法很多。
list<int>slist;
slist.push_back(1);
slist.push_back(2);
slist.push_back(3);
slist.push_back(4);
slist.push_back(5);
//遍历一个链表
list<int>::iterator iter;
for(iter=slist.begin();iter!=slist.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
//链表插入元素
slist.insert(slist.end(),6);
for(iter=slist.begin();iter!=slist.end();iter++){
cout<<*iter<<" ";
}
/*链表删除元素.有三种删除方法1.直接删除最后一个元素
2.所有元素都清除用clear()3.通过迭代器删除
*/
//slist.pop_back();
//slist.clear();
slist.erase(slist.begin());
}
c语言实现:
#includes<stdio.h>
#includes<stdlib.h>
typedef struct NODE
{
int data;
struct Node *next;
}NODE,*PNODE;
//创建一个链表
PNODE createList(){
int val, n;
PNODE pHead=(PNODE)malloc(sizeof(NODE));
PNODE pTail=pHead;
pHead->next=NULL;
printf("请输入链表长度\n");
scanf("%d",&n);
//初始化链表
for(int i=0;i<n;i++){
printf("请输入第%d个数值\n",i+1);//循环第一次执行时候我们我们插入的是第一个节点
scanf("%d",&val);
PNODE Pnew=(PNODE)malloc(sizeof(NODE));
Pnew->data=val;
pTail->next=Pnew;
pTail=Pnew;
Pnew->next=NULL;
}
return pHead;//返回值这个有待理解?
}
//判断链表是否为空,基本思想就是头指针指向的下一个地址是否为空。
int isEmpty(PNODE pHead){
if(pHead->next=NULL){
return 1;
}else{
return 0;
}
}
//遍历一个链表 输出元素
void TraverseList(PNODE pHead){
if(isEmpty(pHead)){
printf("链表为空");
}
else{
PNODE p=pHead->next; //头指针的下一位才有数据域
while(p!=NULL){
printf("%d",p->data);
p=p->next;//不断向下寻找
}
}
}
//删除一个元素
void DeleteList(PNODE pHead,int pos){
if(isEmpty(pHead)){
printf("链表为空");
}
PNODE p=pHead->next;
int i=2;
while(p!=NULL&&i!=pos){
p=p->next;
i++;
}
PNODE q=p->next;
p->next=q->next;
free(q);
}
//插入一个元素
void Insert(PNODE pHead,int pos,int e){
PNODE p,q;
p=pHead->next;
int j=0;
while(p!=NULL&&j<pos-1){
if(j==pos-1){
q=(PNODE)malloc(sizeof(NODE));
q->data=e;
q->next=p->next;
p-next=q;
}
j++;
p=p->next;
}
}//没有加入空间大小查询
int main(){
PNODE pHead=createList();
TraverseList(pHead);
DeleteList(pHead,5);
Insert(pHead,4,8);
return 0;
}
c++实现比c语言简洁多了
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
int main(){
//定义一个链表,采用插入法初始化 初始化方法很多。
list<int>slist;
slist.push_back(1);
slist.push_back(2);
slist.push_back(3);
slist.push_back(4);
slist.push_back(5);
//遍历一个链表
list<int>::iterator iter;
for(iter=slist.begin();iter!=slist.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
//链表插入元素
slist.insert(slist.end(),6);
for(iter=slist.begin();iter!=slist.end();iter++){
cout<<*iter<<" ";
}
/*链表删除元素.有三种删除方法1.直接删除最后一个元素
2.所有元素都清除用clear()3.通过迭代器删除
*/
//slist.pop_back();
//slist.clear();
slist.erase(slist.begin());
}
相关文章推荐
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- 【数据结构】C语言实现链表节点的插入和删除
- 数据结构中单链表的实现+单链表的C语言实现源代码
- C语言数据结构实现链表去重的实例
- 数据结构--单链表的基本操作(C语言实现)
- C语言实现数据结构中的循环链表
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
- 【数据结构】C语言实现链表
- 数据结构(二)——链表(C语言实现)
- C语言数据结构之单向链表(已经调试可以实现相应的功能了,可是还是有几个问题现在还是不大理解,希望大家能够一起探讨)
- 数据结构:单向链表的C语言实现
- 【数据结构】c语言链表实现报数问题
- 数据结构双向循环链表的C语言实现(插入,查询,删除)
- 数据结构--单链表的基本操作(C语言实现)
- C语言数据结构_单链表_19个功能实现全解
- [数据结构]C语言链表实现
- 哈希算法 C语言实现(采用链表)
- C语言数据结构-栈-链表实现
- 数据结构之链表c语言实现
- 算法与数据结构-单向链表的基本操作C语言实现