数据结构 单向链表

如图所示 单项链表节点有两个域:指针域与数据域 定义如下:

typedef int dataType;
class node {
	friend class nodeList;   
private:
	dataType data;   //数据域
	node* link;      //指针域  一个指向下一个元素的指针
};

同时拥有一个节点链表用来存储数据:定义如下

class nodeList {
private:
	node* first;    //头节点指针
public:
	nodeList() { first = 0; }

	void add(dataType num);           //从链表头部按顺序添加
	void insertTail(dataType num);    //连接到尾部
	void mediumInsert(dataType num, int pos);
	void Delete(dataType num);   //删除一个值
	void show();
};

通过指针遍历整个链表:

void nodeList::show() {
	node* p = new node();     
	p = first;              //指向第一个节点
	while (p != NULL) {
		dataType temp = p->data;
		cout << temp << "   ";
		p = p->link;    //数据迭代
	}
	cout << endl;
}


增加一个新的节点:

void nodeList::add(dataType num) {
	node* newNode = new node();    //创建一个新节点
	newNode->data = num;           
	
	newNode->link = first;     //新节点的指针域指向下一个节点
	first = newNode;          //新的节点标记为头节点

}


插入到尾部:

void nodeList::insertTail(dataType num) {
	//新的节点
	node* newNode = new node();
	newNode->data = num;

	//用来遍历
	node* p = new node();   
	p = first;

	while (p->link != NULL) {
		p = p->link;
	}

	newNode->link = p->link;  //尾部插入法
	p->link = newNode;
	
}

中间插入和尾部插入没什么区别 只是迭代到指定的位置然后进行插入操作

//中插
void nodeList::mediumInsert(dataType num, int pos) {
	node* newNode = new node();
	newNode->data = num;  

	node* p = new node();
	p = first;
	int k = 1;   //标记节点位置
	
	while (p->link != NULL && k < pos - 1) {
		p = p->link;
		k++;
	}

	newNode->link = p->link;  
	p->link = newNode;        
}

删除操作:

void nodeList::Delete(dataType num) {
	
	node* p = new node();   //第一个指针
	node* q = new node();   //第二个指针
	p = first;
	q = NULL;
	
	if(p == NULL){         
		return;
	}

	if (p->data == num) {   //判断首个节点是不是要删除的节点
		first = first -> link;

                delete p;        //删除节点
		return; 
	}
	else {
		//开始进行遍历
		while (p != NULL) {
			q = p;         //
			q = q->link;
			if (q->data == num) {
				p->link = q->link;
				delete q;
				break;
			}
			p = p->link;
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值