
#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++链表程序、一个链表的 程序 谁能帮我讲解一下、用线性链表做一个显示菜单,其中有初始化、创建、插入、删除、显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)