本文目录一览:
C语言指针作函数参数中数据的双向传递是什么意思?
通过参数告诉函数:参数指向的单元存放着你要的数据(供函数读写),处理完后也可以将结果放到那些单元(函数结束后供调用程序读写),这样双方都可以读写数据和结果,称为双向传递。
C语言、双向链表
//Node.h 声明类Node
#ifndef Node_H
#define Node_H
template class T
class LinkList; //为是Node类的友员类而声明
template class T
class Node
{
public:
friend class LinkListT; //将LinkList类设为友元类
private:
T data;
NodeT *next;
};
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//LinkList.h 声明类LinkList
#ifndef LinkQueue_H
#define LinkQueue_H
#include "Node.h"
template class T
class LinkList
{
public:
LinkList( ); //建立只有头结点的空链表
LinkList(T a[], int n); //建立有n个元素的单链表
~LinkList( ); //析构函数
int Length( ); //求单链表的长度
T Get(int i); //取单链表中第i个结点的元素值
int Locate(T x); //求单链表中值为x的元素序号
void Insert(int i, T x); //在单链表中第i个位置插入元素值为x的结点
T Delete(int i); //在单链表中删除第i个结点
void PrintList( ); //遍历单链表,按序号依次输出各元素
private:
NodeT *first; //单链表的头指针
};
#endif
。。。。。。。。。。。。。。。。。。。
//LinkList.cpp
#include "LinkList.h"
/*
*前置条件:单链表不存在
*输 入:无
*功 能:构建一个单链表
*输 出:无
*后置条件:构建一个单链表
*/
template class T
LinkListT:: LinkList( )
{
first=new NodeT; first-next=NULL;
}
/*
*前置条件:单链表不存在
*输 入:顺序表信息的数组形式a[],单链表长度n
*功 能:将数组a[]中元素建为长度为n的单链表
*输 出:无
*后置条件:构建一个单链表
*/
template class T
LinkListT:: LinkList(T a[ ], int n)
{
first=new NodeT; //生成头结点
NodeT *r,*s;
r=first; //尾指针初始化
for (int i=0; in; i++)
{
s=new NodeT; s-data=a[i]; //为每个数组元素建立一个结点
r-next=s; r=s; //插入到终端结点之后
}
r-next=NULL; //单链表建立完毕,将终端结点的指针域置空
}
/*
*前置条件:无
*输 入:无
*功 能:无
*输 出:无
*后置条件:无
*/
template class T
LinkListT:: ~LinkList()
{
}
/*
*前置条件:单链表存在
*输 入:查询元素位置i
*功 能:按位查找位置为i的元素并输出值
*输 出:查询元素的值
*后置条件:单链表不变
*/
template class T
T LinkListT::Get(int i)
{
NodeT *p; int j;
p=first-next; j=1; //或p=first; j=0;
while (p ji)
{
p=p-next; //工作指针p后移
j++;
}
if (!p) throw "位置";
else return p-data;
}
/*
*前置条件:单链表存在
*输 入:查询元素值x
*功 能:按值查找值的元素并输出位置
*输 出:查询元素的位置
*后置条件:单链表不变
*/
template class T
int LinkListT::Locate(T x)
{
NodeT *p; int j;
p=first-next; j=1;
if(pp-next){
while(p-data!=x)
{
p=p-next;
j++;
}
return j;
}
else throw "位置";
}
/*
*前置条件:单链表存在
*输 入:插入元素x,插入位置i
*功 能:将元素x插入到单链表中位置i处
*输 出:无
*后置条件:单链表插入新元素
*/
template class T
void LinkListT::Insert(int i, T x)
{
NodeT *p; int j;
p=first ; j=0; //工作指针p初始化
while (p ji-1)
{
p=p-next; //工作指针p后移
j++;
}
if (!p) throw "位置";
else {
NodeT *s;
s=new NodeT;
s-data=x; //向内存申请一个结点s,其数据域为x
s-next=p-next; //将结点s插入到结点p之后
p-next=s;
}
}
/*
*前置条件:单链表存在
*输 入:无
*功 能:输出单链表长度
*输 出:单链表长度
*后置条件:单链表不变
*/
template class T
int LinkListT::Length( )
{
Node T *p = first-next;
int i = 0;
while(p)
{
p = p-next;
i++;
}
return i;
}
/*
*前置条件:单链表存在
*输 入:要删除元素位置i
*功 能:删除单链表中位置为i的元素
*输 出:无
*后置条件:单链表删除元素
*/
template class T
T LinkListT::Delete(int i)
{
NodeT *p; int j;
p=first ; j=0; //工作指针p初始化
while (p ji-1) //查找第i-1个结点
{
p=p-next;
j++;
}
if (!p || !p-next) throw "位置"; //结点p不存在或结点p的后继结点不存在
else {
NodeT *q; int x;
q=p-next; x=q-data; //暂存被删结点
p-next=q-next; //摘链
delete q;
return x;
}
}
/*
*前置条件:单链表存在
*输 入:无
*功 能:单链表遍历
*输 出:输出所有元素
*后置条件:单链表不变
*/
template class T
void LinkListT::PrintList( )
{
NodeT *p;
p=first-next;
while (p)
{
coutp-dataendl;
p=p-next;
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。#includeiostream.h
#include"LinkList.cpp"
#include"Node.h"
void main( )
{
LinkList int a;
cout"执行插入操作:"endl;
try
{
a.Insert(1,4);
a.Insert(2,5);
a.Insert(3,6);
}
catch(char* wrong)
{
cout wrong; //如失败提示失败信息
}
cout"已经插入“4,5,6”"endl;
cout"单链表a的长度为:"endl;
couta.Length()endl; //返回单链表长度
coutendl;
cout"单链表a的元素为:"endl;
a.PrintList(); //显示链表中所有元素
coutendl;
cout"按位查找第二个元素:"endl;
cout"第二个元素为:";
couta.Get(2)endl; //查找链表中第二个元素
coutendl;
cout"按值查找5"endl;
cout"值为5的元素位置为:";
couta.Locate(5)endl; //查找元素5,并返回在单链表中位置
coutendl;
cout"执行删除4的操作"endl;
a.Delete(1); //删除元素4
cout"已删除成功,单链表a的长度为";
couta.Length()endl;
coutendl;
cout"链表a中的元素为:"endl;
a.PrintList();
int r[ ]={1,2,3,4,5};
LinkList int b(r,5); //根据数组创建顺序表
cout"执行插入操作前单链表b为:"endl;
b.PrintList(); //输出单链表所有元素
cout"插入前单链表b的长度为:";
coutb.Length()endl;
try
{
b.Insert(3,8);
}
catch(char* wrong)
{
cout wrong; //如失败提示失败信息
}
cout"执行插入操作后单链表b为:"endl;
b.PrintList(); //输出单链表b所有元素
cout"插入后单链表b的长度为:";
coutb.Length()endl;
coutendl;
try
{
if(a.Length()){
cout"执行删除第一个元素操作:"endl;
coutendl;
b.Delete(1); //删除b中第一个元素
cout"已删除成功,单链表b的长度为:";
coutb.Length()endl;
}
else{
cout"顺序表b长度为0"endl;
}
}
catch(char* wrong)
{
cout wrong; //如失败提示失败信息
}
cout"执行插入操作后单链表b为:"endl;
b.PrintList(); //输出单链表所有元素
}
如何创建c语言的双向循环链表
#includestdio.h
#includestdlib.h
#includeiostream
using namespace std;
int n;
typedef struct node
{
int data;
struct node *prior;
struct node *next;
}node,*DoubleLinkList;
void Creat_List(DoubleLinkList L)
{
DoubleLinkList r,s;
cout"请输入n的值"endl;
cinn;
s = L;
s-prior = s;
s-data = n;
for(int i=0;in;i++)
{
r = (DoubleLinkList)malloc(sizeof(node));
L-next = r;
r-next = s-next;
r-prior = L;
s-next-prior = r;
r-data = i;
L = r;
}
}
void Desplay_List(DoubleLinkList L)
{
DoubleLinkList p;
p = L-next;
for(int i=0;in;i++)
{
cout"输出:"p-dataendl;
p = p-next;
}
}
void Destroy_List(DoubleLinkList L)
{
DoubleLinkList p;
p = L;
node *temp;
for(int k=0;kn;k++)
{
p = L-next;
temp = p-next;
temp-prior-next = temp-next;
temp-next-prior = temp-prior;
free(temp);
}
cout"空间释放成功"endl;
}
void main()
{
node a;
DoubleLinkList p;
p = a;
Creat_List(p);
Desplay_List(p);
Destroy_List(p);
}
由于我也不熟悉,我自己保存的创建例子,希望对你有帮助~
使用C语言实现双向链表的建立、删除和插入
#includestdio.h
#includestdlib.h
#includemalloc.h
struct list{
int data;
struct list *next;
struct list *pre;
};
typedef struct list node;
typedef node *link;
link front=NULL,rear,ptr,head=NULL;
link push(int item){
link newnode=(link)malloc(sizeof(node));
newnode-data=item;
if(head==NULL)
{
head=newnode;
head-next=NULL;
head-pre=NULL;
rear=head;
}
else
{
rear-next=newnode;
newnode-pre=rear;
newnode-next=NULL;
rear=newnode;
}
return head;
}
void makenull(){
front=NULL;
rear=NULL;
}
empty(){
if(front==NULL)
return 1;
else
return 0;
}
int tops(){
if(empty())
return NULL;
else
return rear-data;
}
void pop(){
if(empty())
printf("stack is empty!\n");
else
rear=rear-pre;
}
void display(link l){
link p;
p=l;
while(p!=NULL){
printf("%d-",p-data);
p=p-next;
}
}
void main(){
int n,i;
printf("input your first data!\n");
scanf("%d",n);
front=push(n);
/*another data*/
for(i=0;i3;i++)
{
printf("input:\n");
scanf("%d",n);
push(n);
}
ptr=front;
display(ptr);
printf("\n Please enter any key to pop");
pop();
ptr=front;
display(ptr);
}