今天跟学习了数据结构中的链表(太难了弄了一天才弄出来基本的东西明天接着弄链表希望能够掌握明白链表):
#include<iostream>
using namespace std;
//创建节点
struct Node {
int data;//数据域
Node* next;//指针域
};
//创建链表
class LinkList
{
public:
LinkList();
~LinkList();
void Insert(int pos, int val);
int Search(int val);
int Del(int pos);
int Get(int pos);
int Getlength();
void Print();
private:
Node* head;
int length;
};
LinkList::LinkList()
{
head = new Node;//头节点
head->next = NULL;
length = 0;
}
LinkList::~LinkList() {
Node* q = NULL;
for (Node* p = head; p != NULL; p = q)
{
q = p->next;
delete p;
}
}
void LinkList::Insert(int pos, int val)
{
if (pos < 1)throw"位置不正确";
int count = 0;
Node* s = new Node;
s->data = val;
for (Node*p = head; p != NULL; p = p->next)
{
if (count + 1 == pos)
{
//先顾尾
s->next = p->next;
//再顾头
p->next = s;
}
count++;
}
length++;
}
//按值查询
int LinkList::Search(int val)
{
int pos;
int count = 0;
bool isFind = false;
for (Node* p = head; p != NULL; p->next) {
if (p->data == val)
{
isFind = true;
pos = count;
break;
}
count++;
if (isFind == false)throw"none";
}
return pos;
}
//按位查找
int LinkList::Get(int pos)
{
int count = 0;//这里定义一个count是为了与链表的指针域相对应因为指针域并不是连贯的
for (Node* p = head; p != NULL; p = p->next)
{
if (count == pos)
{
return p->data;
break;
}
count++;
}
}
int LinkList::Del(int pos) {
if (length == 0)throw"下溢";
if (pos<1 || pos>length)throw"位置不正确";
int count = 0;
Node* q = NULL;//用于暂时存放要删除的结点
int val = 0;//用于返回所删除结点的数值
for (Node* p = head; p != NULL; p = p->next)
{
if (count+1 == pos)
{
q = p->next;
val = q->data;
p->next = q->next;//摘链
delete q;
break;
}
count++;
}
length--;
return val;
}
//获得链表长度
int LinkList::Getlength()
{
return length;
}
//打印链表
void LinkList::Print()
{
for (Node* p = head->next; p != NULL; p = p->next)//Node* p = head->next是因为第一个结点是头结点头结点的值为0;
cout << p->data << endl;
}
int main()
{
LinkList list;
int n, pos, val;
char command;
while (cin >> command)
{
if (command == 'E')
break;
try {
switch (command)
{
case'I':
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> pos >> val;
list.Insert(pos, val);
}
break;
case 'S':
cin >> val;
cout << list.Search(val);
break;
case 'D':
cin >> pos;
cout << list.Del(pos);
break;
case 'G':
cin >> pos;
cout << list.Get(pos);
break;
case 'L':
cout << list.Getlength();
break;
case 'V':
list.Print();
break;
}
}
catch (const char* str)
{
cout << str;
}
}
return 0;
}
整了一上午加下午就写了这么点东西实在没心情弄链表了。
晚上学了java:
——随机数(猜测数字小游戏)
package random;
import org.w3c.dom.ls.LSInput;
import java.util.Random;
import java.util.Scanner;
//猜数字游戏
public class randomdemo2 {
public static void main(String[] args) {
Random r = new Random();
int luckynumber = r.nextInt(100)+1;
Scanner s = new Scanner(System.in);
while(true){
System.out.println("请输入您猜测的数据(1——100):");
int guessnumber = s.nextInt();
if(guessnumber>luckynumber)
{
System.out.println("您猜测的数据过大");
}
else if(guessnumber<luckynumber)
{
System.out.println("您猜测的数据过小");
}
else{
System.out.println("猜测正确");
break;
}
}
}
}
——数组(元素求和)
package array;
import java.util.Scanner;
//数组元素求和
public class arraydemo3 {
public static void main(String[] args) {
int[] score = new int[3];
int sum = 0;
Scanner sc = new Scanner(System.in);
for(int i = 0; i < score.length; i++)
{
score[i] = sc.nextInt();
}
for(int j = 0; j < score.length; j++)
{
sum = score[j] + sum;
}
System.out.println(sum);
}
}
——随机排序
package array;
import java.util.Random;
import java.util.Scanner;
//随机排名
//要求对五名员工的工号进行随机排名
public class arraydemo6 {
public static void main(String[] args) {
int[] number = new int[5];
Scanner sc = new Scanner(System.in);
for(int i = 0; i < number.length; i++)
{
//依次录入员工工号
System.out.println("请依次输入第"+(i+1)+"名员工的工号");
number[i] = sc.nextInt();
}
//遍历元素中的每个元素然后随机排序元素
Random r = new Random();
for(int j = 0; j < number.length; j++)
{
int index = r.nextInt(number.length);
//定义一个临时变量存储index位置处的值
int itemp = number[index];
number[index] = number[j];
number[j] = itemp;
}
for(int k = 0; k < number.length; k++)
{
System.out.print(number[k]+"\t");
}
}
}
——冒泡排序(终于整明白了两个循环的含义)
package array;
//数组排序(冒泡排序)
public class arraydemo7 {
public static void main(String[] args) {
int[] arr= new int[]{4,2,5,1};
//比较轮数= 长度-1
for(int i = 1; i <= arr.length; i++)
{
//i = 1 比较次数3 j = 0 1 2
//i = 2 比较次数2 j = 0 1
//i = 3 比较次数1 j = 0
//每轮比较次数= 长度-i
//定义一个循环控制每轮比较的次数,占位
for(int j = 0; j < arr.length - i; j++)
{
if (arr[j] > arr[j+1])
{
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
for(int k = 0; k < arr.length; k++)
{
System.out.println(arr[k]);
}
}
}
——java内存分配
package memory;
//内存分配
public class arraydemo1 {
public static void main(String[] args) {
int[] arr1 = {1,2,3};
int[] arr2 = arr1;//将arr1的地址赋值给arr2
System.out.println(arr1);
System.out.println(arr2);
}
/*
/java中内存的分配:栈 堆 方法区。
方法区:字节码文件:class文件。
栈:方法函数,变量。
堆:new出来的对象。
*/
还有其他一些杂七杂八的小java知识就不写了今天被链表卡住一天其他科目都没得学明天起早点接着干吧就这样了