单链表的初始化,建立,插入,查找,删除。

//单链表的初始化,建立,插入,查找,删除。
#include <stdio.h>  
#include <stdlib.h>  
typedef int ElemType;  
   
//定义结点类型   
typedef struct Node  
{  
    ElemType data;              //单链表中的数据域   
    struct Node *next;          //单链表的指针域   
}Node,*LinkedList;  
   
//单链表的初始化  
LinkedList LinkedListInit()  
{  
    Node *L;  
    L = (Node *)malloc(sizeof(Node));   //申请结点空间   
    if(L == NULL)                       //判断是否有足够的内存空间   
        printf("申请内存空间失败/n");  
    L->next = NULL;                  //将next设置为NULL,初始长度为0的单链表   
}  
   
//单链表的建立1,头插法建立单链表  
LinkedList LinkedListCreatH()  
{  
    Node *L;  
    L = (Node *)malloc(sizeof(Node));   //申请头结点空间  
    L->next = NULL;                      //初始化一个空链表  
      
    ElemType x;                         //x为链表数据域中的数据  
    while(scanf("%d",&x) != EOF)  
    {  
        Node *p;  
        p = (Node *)malloc(sizeof(Node));   //申请新的结点   
        p->data = x;                     //结点数据域赋值   
        p->next = L->next;                    //将结点插入到表头L-->|2|-->|1|-->NULL   
        L->next = p;   
    }  
    return L;   
}   
   
//单链表的建立2,尾插法建立单链表  
LinkedList LinkedListCreatT()  
{  
    Node *L;  
    L = (Node *)malloc(sizeof(Node));   //申请头结点空间  
    L->next = NULL;                  //初始化一个空链表  
    Node *r;  
    r = L;                          //r始终指向终端结点,开始时指向头结点   
    ElemType x;                         //x为链表数据域中的数据  
    while(scanf("%d",&x) != EOF)  
    {  
        Node *p;  
        p = (Node *)malloc(sizeof(Node));   //申请新的结点   
        p->data = x;                     //结点数据域赋值   
        r->next = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL   
        r = p;   
    }  
    r->next = NULL;   
      
    return L;     
}  
   
//单链表的插入,在链表的第i个位置插入x的元素  
LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)  
{  
    Node *pre;                      //pre为前驱结点   
    pre = L;  
    int tempi = 0;  
    for (tempi = 1; tempi < i; tempi++)  
        pre = pre->next;                 //查找第i个位置的前驱结点   
    Node *p;                                //插入的结点为p  
    p = (Node *)malloc(sizeof(Node));  
    p->data = x;   
    p->next = pre->next;  
    pre->next = p;  
      
    return L;                             
}   
   
//单链表的删除,在链表中删除值为x的元素  
LinkedList LinkedListDelete(LinkedList L,ElemType x)  
{  
    Node *p,*pre;                   //pre为前驱结点,p为查找的结点。   
    p = L->next;  
    while(p->data != x)              //查找值为x的元素   
    {     
        pre = p;   
        p = p->next;  
    }  
    pre->next = p->next;          //删除操作,将其前驱next指向其后继。   
    free(p);  
    return L;  
}   
/  
int main()  
{  
    LinkedList list,start;  
/*  printf("请输入单链表的数据:");  
    list = LinkedListCreatH(); 
    for(start = list->next; start != NULL; start = start->next) 
        printf("%d ",start->data); 
    printf("\n"); 
*/  printf("请输入单链表的数据:");   
    list = LinkedListCreatT();  
    for(start = list->next; start != NULL; start = start->next)  
        printf("%d ",start->data);  
    printf("\n");  
    int i;  
    ElemType x;  
    printf("请输入插入数据的位置:");  
    scanf("%d",&i);  
    printf("请输入插入数据的值:");  
    scanf("%d",&x);  
    LinkedListInsert(list,i,x);  
    for(start = list->next; start != NULL; start = start->next)  
        printf("%d ",start->data);  
    printf("\n");  
    printf("请输入要删除的元素的值:");  
    scanf("%d",&x);  
    LinkedListDelete(list,x);   
    for(start = list->next; start != NULL; start = start->next)  
        printf("%d ",start->data);  
    printf("\n");  
      
    return 0;  
}   

上边的代码已经很详细了,,

下面的是我在课堂上写的,,保存一下

//数据结构基础;链表构成;
//链表建立、清空、初始化、遍历;
//节点查找、插入、删除等
//文件夹 :实验报告+源代码 
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct node {
	int data;
	struct node *next;
}Node,*List;
List creat()//链表的创建 
{
	Node *head,*pre,*p;
	head = (Node *)malloc(sizeof(Node)); 
	int n;
	head=pre=p=new node;
	cin>>p->data;
	p->next=NULL;
	while(cin>>n&&n>=0)//输入截止到数据<0 
	{
		p=new node;
		p->data=n;
		p->next=NULL;
		pre->next=p;
		pre=p;//pre可以理解为 连接作用 
	}
	return (head);
 } 
void show(List head)//打印链表 
{  
	Node *p;
	p=head;               
	while(p!=NULL)        
	{
	    cout<< p->data <<" ";
		p=p->next; 
	} 
}
List insert(List head,int i,int n)//插入 
{
	Node *pre;
	pre=head;
	for(int j=1;j<i;j++)//查找第i个位置的前驱结点 
	{
		pre=pre->next;
	}
	Node *p;
	p = (Node *)malloc(sizeof(Node));  //为新结点申请空间 
	p->data=n;
	p->next=pre->next;//p结点的地址指向前驱结点的下一个
	pre->next=p;
	return (head);
}
List Delete(List head,int x)  //删除 
{  
    Node *p,*pre;  
	pre=head;              
    p=head->next;  
    while(p->data != x)              //查找值为x的元素   
    {     
        pre = p;   
        p = p->next;  
    }  
    pre->next = p->next;          //删除操作,将其前驱next指向其后继。   
    free(p);  
    return (head); 
}   
int main()
{
	int n,i,x;
	List list,begin;
	list=creat();
	show(list);
	cout<<endl<<"输入你想在链表的第i个位置插入什么数据  ";
	cin>>i>>n;
	cout<<"输出插入后的链表:"; 
	insert(list,i,n);
	show(list);
	cout<<endl;
    cout<<"请输入要删除的元素的值:";  
    cin>>x;  
    cout<<"输出删除后的链表:"; 
    Delete(list,x);    
    show(list);
    cout<<endl;
	return 0;
}

  • 14
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值