帮调c++链表程序

帮调c++链表程序,第1张

#include <iostream>

#define null 0

using namespace std;

struct node

{

int data;

struct node next;

};

node create(int n)

{

node head, s;

head =null;

int i=0,x;

while (i<n)

{

s= new node;

cin >>x;

s->data=x;

s->next=head;

head=s;

i++;

}

return head;

}

void show(node head)

{

node p;

p=head;

if(head==null)

{

cout<<"链表为空"<<endl;

exit(1);

}

while (p!=null)

{

cout <<p->data<<" ";

p=p->next;

}

cout<<endl;

}

node deletes(node head)

{

node p,s;

s=p=head;

while(s!=null)

if(s->data>9)

{

if(head==s)

{

head=p->next;

s=s->next;

p=p->next;

}

else

{

p->next=s->next;

if(s->next==null)

s=null;

else

s=s->next;

}

}

else

{

if(p!=s)

p=p->next;

s=s->next;

}

return head;

}

void main()

{

node m;

m = create(5);

show(m);

m=deletes(m);

show(m);

}

我给改好了,你自己看看,逻辑关系挺复杂的。

采用头插法,j将数组a[]拆入带头结点的链表中。举例说明如下:

假设数组为int a[3]={1,2,3}; 即n3;

程序首先申请一个头结点h,对应的数据域data=0,下一节点为null;

for(i=n;i>0;i--)

{s=(JD)malloc(sizeof(JD));

s->data=a[i-1];

s->link=h->link;

h->link=s;

}

当i=3时,申请新的结点s,s->data=a[2]=3; s->link=h->link=null; h->link=s;

即现在链表如下 h,3;

当i=2时,申请新的结点s,s->data=a[1]=2; s->link=h->link=3; h->link=s;

即现在链表如下 h,2,3;

当i=1时,申请新的结点s,s->data=a[0]=1; s->link=h->link=2; h->link=s;

即现在链表如下 h,1,2,3;

所以最后插入的结果为:h a[0] a[1] a[2]

// dgfdergcpp : Defines the entry point for the console application

//

#include "stdafxh"

#include"stdioh"

#include"stdlibh"

typedef struct{

int elem;

int length;

int listsize;

}sqlist;

int Initsqlist(sqlist &L)

{

Lelem=(int)malloc(100sizeof(int));

if(!Lelem)

return 0;

Llength=0;Llistsize=100;

return 1;

}

int insertlist(sqlist &L,int n,int x) /添加元素/

{

int i;

if(n>Llength||n<1)

printf("溢出!");

for(i=Llength-1;i>=n-1;i--)

Lelem[i+1]=Lelem[i];

Lelem[n-1]=x;

for(i=0;i<=Llength;i++)

printf("%d",Lelem[i]);

Llength++;

printf("\n");

return 1;

}

int deletelist(sqlist &L,int a) /删除元素/

{ int i;

if(a>Llength||a<1)

printf("删除位置错误!");

for(i=a;i<Llength;i++)

Lelem[i-1]=Lelem[i];

for(i=0;i<Llength-1;i++)

printf("%d",Lelem[i]);

Llength--;

printf("\n");

return 1;

}

int main(int argc, char argv[])

{

sqlist L;

int i,n,x,a;

Initsqlist(L);

printf(" 请输入线性表长度为");

scanf("%d",&Llength);

printf("请输入位序从1到%d的各元素\n",Llength );

for(i=0;i<Llength;i++)

scanf("%d",&Lelem[i]);

printf("请输入在第n位插入元素x:");

scanf("%d%d",&n,&x);

insertlist(L,n,x);

printf("请输入要栓除的位置a:");

scanf("%d",&a);

deletelist(L,a);

printf("Hello World!\n");

return 0;

}

# include <iostreamh> struct node {

char data;

node next;

};

node create();

void showList(node head);

int main()

{

node head;

head=create();

showList(head);

return 0; } node create()

{ node head=NULL;

node pEnd=head;

node pS;

char temp;

cout<<"Please input a string end with'#':"<<endl;

do

{ cin>>temp;

if(temp!='#'){

pS=new node;

pS->data=temp;

pS->next=NULL;

if(head==NULL){

head=pS;}

else{

pEnd->next=pS;

}

pEnd=pS;

}

}while(temp!='#');

return head;

}

void showList(node head){

node pRead=head ;

cout<<"The data of link list are: "<<endl;

while(pRead!=NULL)

{ cout<<pRead->data;

pRead=pRead->next;

}

cout<<endl;

}

电视仓库 单向链表程序如下:

/

/

package comzhh;

import javautilScanner;

/

@author zh520qx

@version 100

@Since Oct 9, 2013

/

public class TVLinkList{//完成电视链表的类

class Node{//内部结点类

private String data;//定义data变量用于存储节点内容

private Node next;//保存下一节点

public Node(String data){//构造方法,设置节点内容

thisdata = data;

}

public void add(Node newNode){//将节点加入到合适的位置

if(thisnext ==null){//如果下一节点为空

thisnext = newNode;//则将节点放在next上

}else{//如果不为空

thisnextadd(newNode);//则需要继续向下查找next

}

}

public void print(){//打印出节点内容

Systemoutprint(thisdata + "\t");

if(thisnext!=null){//如果下一节点不为空

thisnextprint();//则继续调用print()方法打印出节点内容

}

}

public boolean search(String data){//查找节点内容

if(thisdata == null)

{

return false;

}

if(dataequals(thisdata)){//如果查找的节点与当前节点相同

return true;

}else{

if(thisnext!=null){//如果下一节点不为空

return thisnextsearch(data);//则继续向下查找

}else{

return false;

}

}

}

public void delete(Node pervious,String data){

if(thisdata == null)

{

return;

}

if(dataequals(thisdata)){//找到了匹配的节点

perviousnext = thisnext;//空出当前节点

}else{

if(thisnext!=null){

thisnextdelete(this,data);//进行继续查找

}

}

}

};

private Node root;//定义根节点

public void addNode(String data){//增加节点

Node newNode = new Node(data);//定义新的节点

if(thisroot == null){//如果根节点为空

thisroot = newNode;//将第一个节点设置为根节点

}else{//如果不为空

thisrootadd(newNode);//通过Node自动安排此节点的位置

}

}

public void printNode(){//输出链表中的全部内容

if(thisroot!=null){//如果根节点不为空

thisrootprint();//调用Node类的中输出 *** 作

}

}

public boolean contaits(String name){//判断元素是否存在

if(thisroot == null)

{

return false;

}

return thisrootsearch(name);//调用Node类中的查找方法

}

public void deleteNode(String data){

if(thiscontaits(data)){//判断查找的节点是否存在

if(thisrootdataequals(data)){

//一定要判断此元素是否与根元素相等

thisroot = thisrootnext;//将下一节点设置为根节点

}else{

thisrootnextdelete(root,data);//把下一节点的前一节点和数据一起传入进去

}

}

}

static Scanner scanner = new Scanner(Systemin);

static TVLinkList linkList = null;

public static void show()

{

print("===============百货商店·电视仓库系统===============", 1);

print("1、建立电视仓库", 1);

print("2、电视机查询", 1);

print("3、电视机入库", 1);

print("4、电视机出库", 1);

print("5、显示所有电视", 1);

print("6、退出系统", 1);

print("请选择 *** 作项:",2);

int action = scannernextInt();

switch (action)

{

case 1:

if(linkList == null)

{

linkList = new TVLinkList();

print("链表创建成功!", 1);

}else

{

print("链表已创建!", 1);

}

break;

case 2:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

print("请输入要查询的电视:", 2);

String s = scannernext();

if(linkListcontaits(s))

{

print(s + "电视有库存", 1);

}else

{

print(s + "电视不存在", 1);

}

}

break;

case 3:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

print("请输入要入库的电视:", 2);

String s = scannernext();

linkListaddNode(s);

print(s + "入库成功", 1);

}

break;

case 4:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

print("请输入要出库的电视:", 2);

String s = scannernext();

linkListdeleteNode(s);

print(s + "出库成功", 1);

}

break;

case 5:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

linkListprintNode();

print("", 1);

}

break;

case 6:

print("系统已退出", 2);

Systemexit(1);

break;

default:

break;

}

}

public static void print(String info,int flag)

{

if(flag == 1)

{

Systemoutprintln(info);

}

else

{

Systemoutprint(info);

}

}

public static void main(String[] args)

{

while(true)

{

show();

}

}

};

功能已经全部实现,具体你自己运行下程序, *** 作就知道了。

当然,如果真想派上用场,细节部分还得你自己优化。

有问题欢迎提问,吧!

修改完毕 有点瑕疵就是没有释放动态空间

struct nodee //定义一个存储一个数和下一个表的地址结构

{

int value;

nodee next;

};

nodee cre(int n)//创建链表

{

nodee head,p,s;

for(int i=0;i<n;i++)

{

cout<<"请输入第"<<i<<"个节点的数值\n";

p=new nodee;

cin>>(p->value);

if(i==0) //修改处 1 head指针需要指向链表头,开始你说内存出错就是head

{ //指针没有指向链表头

head=p;

s=head;

s->next=NULL;

p=NULL;

}

else

{

s->next=p;

s=p;

s->next=NULL;

p=NULL;

}

}

return head;

}

void show(nodee head)//显示链表

{

nodee p;

p=head;

while (p!=NULL) //修改处2 不能判断下一个元素是否为空,不然链表末尾元素不会输出

{

cout<<p->value<<endl;

p=p->next;

}

}

void Dellist(nodee head) //帮你加个函数,释放动态空间

{

nodee temp;

while(head!=NULL)

{

temp=head;

head=head->next;

delete temp;

temp=NULL;

}

}

int main()

{

nodee head;

head=cre(5);

cout<<"end"<<endl;

show(head);

Dellist(head);

return 0;

}

以上就是关于帮调c++链表程序全部的内容,包括:帮调c++链表程序、一个链表的 程序 谁能帮我讲解一下、用线性链表做一个显示菜单,其中有初始化、创建、插入、删除、显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10119622.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存