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

采用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());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: