链表程序实现

在这里实现了带头结点的链表,包含插入,删除,查询,清空链表一系列功能

#include<iostream>
using namespace
std;
class
LinkList 
{
    char *elem;
   
LinkList *next;
    static int
length;
public:
   
LinkList(char *e)    //一个含头结点的构造函数
   
{
        elem=NULL;
   
    next=new LinkList(e,1);
   
}
    LinkList(char *e,int i)//不含头结点的构造函数
   
{
            length++;
   
        elem=new char(sizeof(e)+1);
   
        strcpy(elem,e);
   
        next=NULL;
   
}
    void GetElem(int
i,char *&e);    //查询第i个元素的值
   
void
ListInsert(int
i,char *e);
//插入函数
    void ListDelete(int i,char
*&e);
//节点删除函数
    void ClearList();  
           //清空链表
    void
CreatList(int n);
        //生成N个节点的链表
    void show();  
                 //显示所有节点
};
int LinkList::length=0;
void
LinkList::GetElem(int i,char
*&e)
{
   
LinkList *p=this->next;
    int j=0;
    while(p&&j<i-1)
   
{
        p=p->next;
   
    j++;
   
}
    if(!p||j>i)
   
{    cout<<"error
position"<<endl;
   
    return;
   
}
    e=new char(sizeof(p->elem)+1);
   
strcpy(e,p->elem);
}
void LinkList::ListInsert(int
i,char *e)
{
   
LinkList *p=this;
   
int j=0;
    while(p&&j<i-1)
   
{
        p=p->next;
   
    ++j;
   
}
    if(!p||j>i-1)
   
{
        cout<<"insert position error"<<endl;
   
    return;
   
}
    LinkList *q=new LinkList(e,1);
    q->next=p->next;
    p->next=q;
   
show();
}
void LinkList::ListDelete(int
i,char *&e)
{
   
LinkList *p=this;
   
int j=0;
    while(p&&j<i-1)
   
{
        p=p->next;
   
    ++j;
   
}
    if(!p||j>i-1)
   
{
        cout<<"insert position error"<<endl;
   
    return;
   
}
    LinkList *q=p->next;
    if(i!=length)
      //删除最后一个节点时,需要注意的是q->next是没有定义的,会出错的,因此此处要特别对待!!!!
   
    p->next=q->next;
    else
   
    p->next=NULL;
    e=new char(sizeof(q->elem)+1);
   
strcpy(e,q->elem);
   
delete(q);
   
length--;
   
show();
}
void LinkList::ClearList()
{
   
LinkList *p;
   
while(this->next)
   
{
        p=this->next;
   
    this->next=p->next;
   
    delete
p;

    }
    length=0;
    cout<<"all
nodes are cleared"<<endl;
}
void
LinkList::show()
{
   
LinkList *p=this->next;
    int i=1;
    while(p)
   
{
        cout<<"the "<<i<<"th
Node elem is:"<<p->elem<<endl;
   
    p=p->next;
   
    i++;
   
}
    cout<<"_______________________________"<<endl;

}
void
main()
{
    LinkList a("baichi");
   
char *co=NULL;
   
a.ListInsert(1,"sb250");
   
a.ListInsert(1,"dasb250dsdf");
   
a.ListDelete(3,co);
    cout<<"bei
shan chu de:"<<co<<endl;
   
a.GetElem(1,co);
    cout<<co<<endl;
   
a.GetElem(3,co);
   
a.ClearList();
}

来自为知笔记(Wiz)

链表程序实现

时间: 2024-08-10 19:17:37

链表程序实现的相关文章

单向链表程序

1 /***************************************************************************** 2 * 程序说明 3 * 程序名称:简单单向链表 4 * 5 * 功能: 实现单向链表的创建.插入.删除.遍历和查找 6 * 7 * 作者: Veis 8 * 9 * 注:此代码已在VC6.0及VS2010环境下编译通过,能正常实现所对应的功能 10 * 程序元素排序与数组下标一样,从0开始. 11 ******************

链表程序详解Linklist.c

#include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct node/*链表的每一个节点都是结构体*/ { datatype data; struct node *next; }linklist;/*linklist 是struct node 的别名,以后就可以用linklist来替代struct node*/ /*函数声明区*/ linklist * list_create(); int

单链表(程序员宝典)

// #include "stdafx.h" #include <iostream> #include <stdio.h> #include <string.h> #include <conio.h> typedef struct student { int data; struct student *next; }node; //建立单链表 node* create() { node *head,*p,*s; int x, cycle

9.9 链表及其运用

单向链表的实现方法: #include <stdio.h> #include <stdlib.h> struct list { int data; struct list *next; }; /*创建一个节点*/ struct list *create_list() { return calloc(sizeof(struct list) , 1); } /*打印链表的内容*/ void traverse(struct list *p) { //循环实现 //p = p->ne

异质链表

8.5.2异质链表 程序中,用基类类型指针,可以生成一个连接不同派生类对象的动态链表,即每个结点指针可以指向类层次中不同的派生类对象. 这种结点类型不相同链表称为异质链表. 比如:任务管理器,使用异质链表实现. 使用QT,建立一个异质链表,使其可以存储多个类的对象,包括Dialog,QLabel,QPushButton 1 #include "mainwindow.h" 2 #include <QApplication> 3 #include<QPushButton&

数据结构与算法(C++版本)-单链表

单链表的建立 1 #include<iostream> 2 using namespace std; 3 class list 4 { 5 public: 6 int num,score; 7 char name[10]; 8 class list *next; 9 }; 10 typedef class list node; 11 typedef node *link; 12 int main() 13 { 14 link newnode,ptr,delptr; //声明三个表结构指针 15

链表翻转系列

Problem I 翻转链表 程序(简洁版) 非递归 ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while (cur != null ) { ListNode next = cur.next; cur.next = pre; pre = cur; cur = next; } return pre; } Problem II: Swap Nodes in Pairs Given a

常见和链表相关的算法

一. 链表排序 链表排序和数组排序的思路类似,只是链表操作起来比较麻烦,因为不能随机访问,所以只能借助于类似于前置或后置插入,添加等概念来完成.下面给出了链表排序的几种方法. 辅助代码: //单链表节点的定义 typedef struct LinkNode{ int val; struct LinkNode* next; }LinkNode; //由一个数组创建单链表 LinkNode* CreateList(int A[], int count) { if(NULL == A) return

有序链表的插入操作

C语言教材的有序单链表程序的插入我并不满意,因为链表为空,表尾等原因导致有四种情况要处理,给同学们的阅读造成困难.书上的做法较复杂的一个原因是链表是不带头结点的,所以要考虑新结点插入时会不会变成表头, 例如:当链表为空时, 插入3, 3变成表头,  再插入1, 链表为1->3, 链表头指向1, 代码必须处理这样的情况. 第一部分: 不含头结点的链表插入的非常规思路 下面我给出另外一个思路,新结点一律插入表头,这样就不要考虑链表为空的情况了.但是可能无序,可以从表头开始,相邻节点不符合次序要求交换