结构体与链表

目录

初始化

结构体数组

结构体和指针

结构体中“ . ”和“ -> ”的比较分析:

动态链表的建立:

建立新节点

插入新节点

节点删除

​销毁链表

查找节点


一种扩展数据类型,是若干相关数据项的集合
定义的结构式:
struct 结构名{
      成员表
};

struct  {
                 double     x;
                 double     y;
}point1;

point1.x=1;
point1.y=2;
//结构名和变量名相同,以这种方式定义新类型,这种类型只能使用一次

struct  point{
                 double     x;
                 double     y;
}point1;

point1.x=1;
point1.y=2;
//可再定义point 类型的变量

初始化:

 struct  Date {
                 int     year,month,day;
   } date={2000,12,1};
 //结构体变量定义的同时初始化,使用{}

结构体数组:

结构体成员为指针
struct Student
{
	char *name;
	char *no=new char[80];
	double score;
}stud;

stud.name=new char[80]);	//需要分配空间,内外均可

结构体和指针:

//指向结构体变量的指针
struct  point {
   int	x,y;
};
point point1={10,10}, *ptr;
ptr=&point1;
(*ptr).x=20;  (*ptr).y=20;
ptr->x=30;  ptr->y=30; 

结构体中“ . ”和“ -> ”的比较分析:

相同点:两个操作符都是二元操作符,且其有操作符是结构体成员的名称。
不同点:“ . ”操作符左边的操作数是一个“结构体”的表达式,而“ -> ”操作符左边的操作数是一个指向结构体的指针。

定义的结构体变量,则访问数据时用".";
定义的结构体指针,则访问数据时用"->";

#include <iostream>
using namespace std;
struct student
{
    char name;
    int num;
    int score;
};

int main()
{

    student A;
    student *B;
    //*B=A;
    A.name='a';
    A.num=1;
    A.score=99;

//错误输出:
    cout<<A.name<<A->num<<A.score<<endl;
/*  error: base operand of '->' has non-pointer type 'student'
    定义的是结构体变量A,访问使用“.”  */
    cout<<B->name<<B->num<<B.score<<endl;
/*  error: request for member 'score' in 'B', which is of pointer type 'student*' (maybe 
    you meant to use '->' ?)
    定义的是结构体指针B,访问使用“->” */

//正确输出:
    cout<<A.name<<A.num<<A.score<<endl;
    cout<<B->name<<B->num<<B->score<<endl;
}

void change(student s,int eng)   //不能修改s
void change(student *s,int eng)  //可以修改s
void change(student &s,int eng)  //可以修改s



动态链表的建立:

一个一个开辟新结点,输入结点数据,新结点连入链表的过程。
创建新链表:

struct Node
{	
    int data;
	Node* next;
};

//创建新链表,新结点不断在尾部插入
Node *create()		
 {	
	Node *head,*pnew,*tail;
	head=new Node;head->data=0;//head->data记录节点个数
	head->next=NULL;tail=head;
	int t;
	while(cin>>t)
    {
	 	pnew=new Node;
		pnew->data=t;
		pnew->next=NULL;
		tail->next=pnew;
		tail=pnew;
		head->data++;	
    }
	return head;				
}

建立新节点:

Node *pnew=new Node;   //分配空间
pnew->data=2;         //给数据域赋值
pnew->next=NULL;      //给指针域赋值

插入新节点:
int insert(Node *head,int index, int val)

节点删除:Node* del(Node* head, int index)


销毁链表:void distory(Node *head)

查找节点:int  search(Node *head, int val) 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值