- 浏览: 129852 次
- 性别:
- 来自: Ottawa
最新评论
-
God一冰魄:
<div class="quote_title ...
MongoDB 3.0 速上手教程(JAVA) -
xiuxiuxiu:
膨胀腐蚀大概是什么意思,能留个微信吗
结合OPENNI2,Aruco与OPENCV进行视觉定位 -
jcs130:
<div class="quote_title ...
MongoDB 3.0 速上手教程(JAVA) -
thebest:
感觉保存JSON数据会很浪费空间啊。如果每个记录的标签都是重复 ...
MongoDB 3.0 速上手教程(JAVA) -
jcs130:
liuyar 写道更新很快嘛。加油。谢谢啦,不过接下来要继续研 ...
WiFi遥控小车(三):搭建嵌入式Linux开发环境
收藏列表
标题 | 标签 | 来源 | |
开发板上的UDP端口监听程序 | |||
/* * main.c * * Created on: 2012-10-18 * Author: micro */ #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<netinet/in.h> #include<stdio.h> #include<stdlib.h> #include <sys/ioctl.h> #define MAXLINE 5 #define SERV_PORT 12345 void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[MAXLINE]; for (;;) { len = clilen; printf("Waiting for Data...\n"); //等待数据 n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len); //将数据返回 //sendto(sockfd, mesg, n, 0, pcliaddr, len); //打印数据 //printf("%s\n", mesg); colcars(mesg[0]); } } //根据收到的信息执行操作 void colcars(char cmd) { if (cmd < '0' || cmd > '10') { printf("cmd error\n"); } else { if (cmd == '2') { // printf("car back\n"); car_col('6'); } else { car_col(cmd); } } } void car_col(char cmd) { int fd; fd = open("/dev/car0", 0); if (fd < 0) { fd = open("/dev/car", 0); } if (fd < 0) { perror("open device car"); return; } ioctl(fd, cmd, 0); close(fd); } int main(void) { int sockfd; struct sockaddr_in servaddr, cliaddr; //建立socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); //初始化服务器地址 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY ); servaddr.sin_port = htons(SERV_PORT); //为socket绑定端口 if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1) { perror("bind error"); exit(1); } //执行服务器程序 do_echo(sockfd, (struct sockaddr *) &cliaddr, sizeof(cliaddr)); return 0; } |
|||
小车测试程序 | |||
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, char **argv) { int cmd; int led_no; int fd; if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &cmd) != 1 || cmd < 0 || cmd > 9 || led_no < 0 || led_no > 3) { fprintf(stderr, "Usage: car led_no 0|1\n"); exit(1); } fd = open("/dev/car0", 0); if (fd < 0) { fd = open("/dev/car", 0); } if (fd < 0) { perror("open device car"); exit(1); } printf("CMD=%d\n",cmd); ioctl(fd, cmd, led_no); close(fd); return 0; } |
|||
Wifi小车电机驱动 | |||
#include <linux/miscdevice.h> #include <linux/delay.h> #include <asm/irq.h> //#include <mach/regs-gpio.h> #include <mach/hardware.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/types.h> #include <linux/delay.h> #include <linux/moduleparam.h> #include <linux/slab.h> #include <linux/errno.h> #include <linux/ioctl.h> #include <linux/cdev.h> #include <linux/string.h> #include <linux/list.h> #include <linux/pci.h> #include <asm/uaccess.h> #include <asm/atomic.h> #include <asm/unistd.h> #include <mach/map.h> #include <mach/regs-clock.h> #include <mach/regs-gpio.h> #include <mach/gpio.h> //#include <linux/gpio.h> #include <plat/gpio-cfg.h> #include <mach/gpio-bank-e.h> #include <mach/gpio-bank-k.h> #define DEVICE_NAME "car" //控制前后的电机 #define MOTOR_QH_ENA S3C64XX_GPM(4) #define MOTOR_QH_ENB S3C64XX_GPM(5) //控制方向的电机 #define MOTOR_FX_ENA S3C64XX_GPE(3) #define MOTOR_FX_ENB S3C64XX_GPE(4) #define debug 1 static unsigned long motor_table [] = { MOTOR_QH_ENA, MOTOR_QH_ENB, MOTOR_FX_ENA, MOTOR_FX_ENB }; //初始化GPIO口 static int car_motor_init(void) { int ret=0,i; for (i = 0; i < 4; i++) { if(gpio_is_valid(motor_table[i])==-EINVAL) { printk("ERROR,GPIO used by other devices ! \n"); break; } //上拉GPIO s3c_gpio_setpull(motor_table[i], S3C_GPIO_PULL_UP); //设置为输出 s3c_gpio_cfgpin(motor_table[i], S3C_GPIO_OUTPUT); //设置默认值为低电平 gpio_set_value(motor_table[i],0); } return ret; }; static void car_motor_status(void) { printk("MOTOR_QH_ENA=%d\nMOTOR_QH_ENB=%d\nMOTOR_FX_ENA=%d\nMOTOR_FX_ENB=%d\n", gpio_get_value(MOTOR_QH_ENA), gpio_get_value(MOTOR_QH_ENB), gpio_get_value(MOTOR_FX_ENA), gpio_get_value(MOTOR_FX_ENB)); }; static void car_motor_run(void) { gpio_set_value(MOTOR_QH_ENA,1); gpio_set_value(MOTOR_QH_ENB,0); }; static void car_motor_stop(void) { #if debug car_motor_status(); #endif gpio_set_value(MOTOR_QH_ENA,0); gpio_set_value(MOTOR_QH_ENB,0); }; static void car_motor_back(void) { gpio_set_value(MOTOR_QH_ENA,0); gpio_set_value(MOTOR_QH_ENB,1); }; static void car_motor_left(void) { gpio_set_value(MOTOR_FX_ENA,1); gpio_set_value(MOTOR_FX_ENB,0); }; static void car_motor_right(void) { gpio_set_value(MOTOR_FX_ENA,0); gpio_set_value(MOTOR_FX_ENB,1); }; static void car_motor_zheng(void) { gpio_set_value(MOTOR_FX_ENA,0); gpio_set_value(MOTOR_FX_ENB,0); }; static long car_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { #if debug printk("cmd=%d\n",cmd); #endif long ret=0; switch(cmd) { case '0': case 0: //小车停止 car_motor_stop(); break; case '1': case 1: //小车前进 car_motor_run(); break; //小车后退 case '2': case 2: car_motor_back(); break; //左转 case '3': case 3: car_motor_left(); break; //右转 case '4': case 4: car_motor_right(); break; //直走 case '5': case 5: car_motor_zheng(); break; //小车后退 case '6': case 6: car_motor_back(); break; return 0; default: return -EINVAL; } return ret; } static struct file_operations dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = car_ioctl, }; static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops, }; static int __init dev_init(void) { int ret; car_motor_init(); // car_motor_run(); ret = misc_register(&misc); printk (DEVICE_NAME"\tinitialized\n"); return ret; } static void __exit dev_exit(void) { misc_deregister(&misc); } module_init(dev_init); module_exit(dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Lintel."); |
|||
学校信息类 | |||
package 学生运动会成绩管理; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; /** * 学校类 * * @author Micro * */ public class SchoolNode implements Serializable, Comparable<SchoolNode> { /** * */ private static final long serialVersionUID = 1L; // 属性:编号,名字,成绩 private String name = "";// 学校名称 private int ID;// 学校编号 private int mScore;// 男子项目成绩 private int wScore;// 女子项目成绩 // 存储项目名称的队列 private ArrayList<String> ItemName = new ArrayList<String>(); private int pai; // 存储具体是哪一项得了多少分的图 private HashMap<String, String> score = new HashMap<String, String>(); // 构造方法,在构造对象时要传入名字以及编号 public SchoolNode(String name, int ID) { this.name = name; this.ID = ID; pai = ID; } public int getID() { return ID; } public String getName() { return name; } public HashMap<String, String> getScore() { return score; } // 设置排序方式 public void setPai(int a) { if (a == 0) { // 以ID排序 pai = ID; } else if (a == 1) { // 以总分排序 pai = wScore + mScore; } else if (a == 2) { // 以男子项目成绩排序 pai = mScore; } else { // 以女子项目成绩排序 pai = wScore; } } public int getmScore() { return mScore; } public int getwScore() { return wScore; } public int getPai() { return pai; } public ArrayList<String> getItemName() { return ItemName; } // 添加成绩的方法 public void addScore(String iName, String Score, Tools to) { ItemNode in = to.findItByName(iName); int v = 0; if (in.isBig()) { if (Score.equals("第一名")) { v = 7; } if (Score.equals("第二名")) { v = 5; } if (Score.equals("第三名")) { v = 3; } if (Score.equals("第四名")) { v = 2; } if (Score.equals("第五名")) { v = 1; } } else { if (Score.equals("第一名")) { v = 5; } if (Score.equals("第二名")) { v = 3; } if (Score.equals("第三名")) { v = 2; } } score.put(in.getName(), Score); // 分别统计男女项目得分 if (in.isMan()) { mScore += v; } else { wScore += v; } ItemName.add(iName); } @Override public int compareTo(SchoolNode o) { // TODO Auto-generated method stub int p = o.getPai(); return p - pai; } } |
|||
哈弗曼编码解码主类 | |||
package 哈夫曼压缩; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.HashMap; import java.util.PriorityQueue; public class MainF { // 创建根节点 private static HafNode root; // 储存节点编码的图 HashMap<Character, Code> SaveCode = new HashMap<Character, Code>(); public HashMap<Character, Code> getSaveCode() { return SaveCode; } // 程序入口 public static void main(String[] args) throws Exception { // 储存字符出现频率的图 HashMap<Character, Integer> PL = new HashMap<Character, Integer>(); MainF ma = new MainF(); ma.setCode(PL); PriorityQueue<HafNode> pq = new PriorityQueue<HafNode>(); pq.add(new HafNode(' ', PL.get(' '))); for (char i = 'A'; i <= 'Z'; i++) { pq.add(new HafNode(i, PL.get(i))); } // 根据优先队列创建哈夫曼树 ma.creatHafTree(pq); // 获得各叶节点的哈弗曼编码 String Code = ""; ma.getCode(root, Code); // 将字符串转化为哈弗曼编码 String haf = ma .toHaf(ma.getSaveCode(), "THIS PROGRAM IS MY FAVORITE "); // 将编码写入文件 FileOutputStream fos = new FileOutputStream(new File("d:\\CodeFile.txt")); BufferedOutputStream bos = new BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos); dos.writeUTF(haf); dos.flush(); // 从文件读取编码数据 FileInputStream fis = new FileInputStream(new File("d:\\CodeFile.txt")); BufferedInputStream bis = new BufferedInputStream(fis); DataInputStream dis = new DataInputStream(bis); String hfcode = dis.readUTF(); char[] hfchars = hfcode.toCharArray(); //创建译码映射 HashMap<String, Character> ym=ma.Setmap(ma.getSaveCode()); /*******译码**********/ String res=""; //待转换的字符串 String cov=""; for(int i=0;i<hfchars.length;i++){ cov+=hfchars[i]; if(ym.containsKey(cov)){ res+=ym.get(cov); cov=""; System.out.println(res); } } } // 创建哈夫曼树 public void creatHafTree(PriorityQueue<HafNode> queue) { while (queue.size() > 1) { HafNode min1, min2; min1 = queue.poll(); min2 = queue.poll(); // 创建合并的节点 HafNode result = new HafNode('0', (min1.getPl() + min2.getPl())); result.setLeft(min1); result.setRight(min2); min1.setFather(result); min2.setFather(result); queue.add(result); } root = queue.peek(); } // 设置字符频度 public void setCode(HashMap<Character, Integer> code) { code.put(' ', 186); code.put('A', 64); code.put('B', 13); code.put('C', 22); code.put('D', 32); code.put('E', 103); code.put('F', 21); code.put('G', 15); code.put('H', 47); code.put('I', 57); code.put('J', 1); code.put('K', 5); code.put('L', 32); code.put('M', 20); code.put('N', 57); code.put('O', 63); code.put('P', 15); code.put('Q', 1); code.put('R', 48); code.put('S', 51); code.put('T', 80); code.put('U', 23); code.put('V', 8); code.put('W', 18); code.put('X', 1); code.put('Y', 16); code.put('Z', 1); } // 获得各叶节点的哈弗曼编码 public void getCode(HafNode a, String code) { if (a.getLeft() == null && a.getRight() == null) { System.out.println(a.getN() + "——的哈夫曼编码为:\t" + code); Code b = new Code(code.length(), code); SaveCode.put(a.getN(), b); } if (a.getLeft() != null) { getCode(a.getLeft(), code + '0'); } if (a.getRight() != null) { getCode(a.getRight(), code + '1'); } } // 将字符串转化为哈夫曼编码串 public String toHaf(HashMap<Character, Code> SaveCode, String s) { String haf = ""; char[] msg = s.toCharArray(); for (int i = 0; i < msg.length; i++) { haf += SaveCode.get(msg[i]).getNode(); } System.out.println(haf); return haf; } // 创建映射 public HashMap<String, Character> Setmap(HashMap<Character, Code> SaveCode) { HashMap<String, Character> map = new HashMap<String, Character>(); map.put(SaveCode.get(' ').getNode(), ' '); for (char i = 'A'; i <= 'Z'; i++) { map.put(SaveCode.get(i).getNode(), i); } return map; } } |
|||
哈夫曼树节点类 | |||
package 哈夫曼压缩; import java.io.Serializable; /** * 哈夫曼树节点类 * * @author Micro * */ public class HafNode implements Comparable<HafNode>, Serializable { /** * */ private static final long serialVersionUID = 1L; private HafNode father; private HafNode left; private HafNode right; private int pl; private char n; // 重载构造器 public HafNode(char n, int pl) { this.n = n; this.pl = pl; } public HafNode getFather() { return father; } public void setFather(HafNode father) { this.father = father; } public HafNode getLeft() { return left; } public void setLeft(HafNode left) { this.left = left; } public HafNode getRight() { return right; } public void setRight(HafNode right) { this.right = right; } public void setN(char n) { this.n = n; } public char getN() { return n; } public int getPl() { return pl; } // 设置要比较的对象 @Override public int compareTo(HafNode o) { // 要比较的是频率的大小 int P = o.getPl(); return pl - P; } } |
|||
存储每一个字节的哈弗曼编码和哈夫曼编码的长度 | |||
package 哈夫曼压缩; /** * 存储每一个字节的哈弗曼编码和哈夫曼编码的长度 * * @author Micro * */ public class Code { // 哈夫曼编码 private String node; // 编码长度 private int n; // 重载构造器 public Code(int n, String node) { this.n = n; this.node = node; } public String getNode() { return node; } public void setNode(String node) { this.node = node; } public int getN() { return n; } public void setN(int n) { this.n = n; } } |
|||
在JAVA中怎样判断按下两个键 | http://blog.csdn.net/legendmohenote/article/details/5780872 | ||
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ import javax.swing.JPanel; import javax.swing.JTextField; /** * * @author 阿迪 */ public class HOHO extends JFrame implements KeyListener{ private JTextField t; private boolean left = false; private boolean right = false; private boolean up = false; private boolean down = false; public HOHO() { JPanel p = new JPanel(); this.add(p); p.setLayout(null); t = new JTextField(); t.setEditable(false); p.add(t); t.setSize(100,30); t.setLocation(200,200); this.setFocusable(true); this.addKeyListener(this); this.setSize(480,480); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { int i = e.getKeyCode(); switch(i) { case KeyEvent.VK_LEFT : left=true; break; case KeyEvent.VK_UP : up= true;break; case KeyEvent.VK_DOWN :down = true; break; case KeyEvent.VK_RIGHT : right = true;break; } if(up==false&&down==false&&left==false&&right==false) { t.setText("什么也没按"); } else if(up==true&&down==false&&left==false&&right==false) { t.setText("上"); } else if(up==false&&down==true&left==false&&right==false) { t.setText("下"); } else if(up==false&&down==true&left==true&&right==false) { t.setText("左下"); } else if(up==true&&down==false&left==false&&right==true) { t.setText("右上"); } else if(up==true&&down==false&left==true&&right==false) { t.setText("左上"); } else if(up==false&&down==true&left==false&&right==true) { t.setText("右下"); } else if(up==false&&down==false&left==true&&right==false) { t.setText("左"); } else if(up==false&&down==false&left==false&&right==true) { t.setText("右"); } } public void keyReleased(KeyEvent e) { int i = e.getKeyCode(); switch(i) { case KeyEvent.VK_LEFT : left=false; break; case KeyEvent.VK_UP : up= false;break; case KeyEvent.VK_DOWN :down = false; break; case KeyEvent.VK_RIGHT : right = false;break; } } public static void main(String[] args){ new HOHO(); } } |
|||
实现常规的串的匹配,求解next函数和nextval函数,然后实现KMP算法 | |||
#include"stdlib.h" #include"string.h" #include"time.h" #include"stdio.h" #include"malloc.h" typedef struct{ char *ch; int length; }HString; //初始化 int InitStr(HString *S) { S->ch=(char *)malloc(sizeof(char)); if(!S->ch) exit-2;//存储分配失败 S->length=0; return 1; } //在空串中添加元素 int AddStr(HString *S) { char ch; int i=0; while((ch = getchar()) != '\n') { S->ch[i]=ch; S->ch=(char *)realloc(S->ch,sizeof(char));// 追加分配存储空间 i++; S->length++; } return (i); } //输出串 int PrintStr(HString *S) { //输出长度为S->length的字符串 int i=0; for(i=0;i<S->length;i++) { putchar(S->ch[i]);//每次实现一个字符输出 } } //串的常规匹配 int Index(HString *S,HString *T) { int i=1; int j=1; while(i<=S->length&&j<=T->length) { if(S->ch[i-1] == T->ch[j-1]) { ++i; ++j; }//继续比较后继字符 else { i = i-j+2; j = 1; }//指针后退,重新开始匹配 } if(j>T->length) return (i-T->length); else return 0; } //用KMP算法实现串的模式匹配 int Index_KMP(HString *S,HString *T,int next[]) { int i=1; int j=1; while(i<=S->length&&j<=T->length) { if(j==1||S->ch[i-1] == T->ch[j-1]) { ++i; ++j; }//继续比较后继字符 else j = next[j]; } if(j>T->length) return (i-T->length); else return 0; } //求模式串T的next函数值并存入数组next void get_next(HString *T,int next[]) { int i=1; int j=0; next[1]=0; while(i<T->length) { if(j==0||T->ch[i-1]==T->ch[j-1]) { ++i; ++j; next[i] = j; } else j = next[j]; } } //求模式串T的next函数修正值并存入数组nextval void get_nextval(HString *T,int nextval[]) { int i=1; int j=0; nextval[1]=0; while(i<T->length) { if(j==0||T->ch[i-1] == T->ch[j-1]) { ++i; ++j; if(T->ch[i-1] != T->ch[j-1]) nextval[i] = j; else nextval[i] = nextval[j]; } else j = nextval[j]; } } main() { int pos1=0; int pos2=0; HString S,T; int next[100]; int nextval[100]; int i=0; int j=0; InitStr(&S); printf("\n主串S初始化成功!"); printf("\n请输入主串S:"); AddStr(&S); printf("\n主串S的长度为:%d\n",S.length); InitStr(&T); printf("\n子串T初始化成功!"); printf("\n请子模式串T:"); AddStr(&T); printf("\n子串T的长度为:%d\n",T.length); pos1 = Index(&S,&T); if(pos1==0) printf("\n串的常规匹配失败!"); else { printf("\n串的常规匹配成功!"); printf("\n串的常规匹配成功位置为%d\n",pos1); } get_next(&T,next); printf("\n求解next函数值为:next[i]= "); for(i=1;i<=T.length;i++) printf("%d\t",next[i]); get_nextval(&T,nextval); printf("\n求解nextval函数值为:nextval[i]= "); for(i=1;i<=T.length;i++) printf("%d\t",nextval[i]); pos2=Index_KMP(&S,&T, next); if(pos2==0) printf("\nKMP匹配失败!"); else { printf("\nKMP匹配成功!"); printf("\nKMP匹配成功位置为%d",pos2); } getch(); } |
|||
循环队列的插入和删除操作 | |||
#include<stdio.h> #include<malloc.h> #define MAXQSIZE 100 typedef int QElemType; typedef struct{ QElemType *base; int front; int rear; }SqQueue; SqQueue Q;//定义一个全局变量。 //初始化 int InitQueue(SqQueue *Q) { Q->base = (QElemType *)malloc(MAXQSIZE *sizeof(QElemType));//分配存储空间 if(!Q->base) { printf("\n存储分配失败!"); exit -2; } Q->front = Q->rear = 0; printf("\n循环队列初始化成功!"); return 1; } //求队列的长度 int QueueLength(SqQueue *Q) { return (Q->rear - Q->front + MAXQSIZE) % MAXQSIZE; } //插入元素 e为Q的新队尾元素 int EnQueue(SqQueue *Q) { QElemType e; if((Q->rear + 1) % MAXQSIZE == Q->front)//判断队列是否已满 { printf("\n队列已满!"); return 0; } printf("\n请输入入队列的元素值:"); scanf("%d",&e); Q->base[Q->rear] = e; Q->rear = (Q->rear + 1) % MAXQSIZE;//入队 return 1; } //打印队列中的所有元素 QElemType PrintQueue(SqQueue *Q) { QElemType e; QElemType p; int i; if(Q->front == Q->rear) { printf("\n队列为空,请先插入元素!"); return 0; } p = Q->front; for(i=0;i<((Q->rear-p+MAXQSIZE)%MAXQSIZE);i++) { e = Q->base[Q->front]; printf("%d\t",e); Q->front = (Q->front+1)%MAXQSIZE; } Q->front = p; return 1; } //删除队头e,并返回其值 int DeQueue(SqQueue *Q) { QElemType e; if(Q->front == Q->rear) { printf("\n队列为空!"); return 0; } e = Q->base[Q->front]; Q->front = (Q->front+1) % MAXQSIZE; return e; } //**************主函数*************** main() { int length; int i,n,head; QElemType print; InitQueue(&Q); printf("\n请输入要入队列的元素个数:"); scanf("%d",&n); for(i=0;i<n;i++) EnQueue(&Q); length = QueueLength(&Q); printf("\n该队列长度为:%d",length); printf("\n队列中的元素为:"); PrintQueue(&Q); head = DeQueue(&Q); printf("\n队头元素 %d 已被删除!",head); printf("\n删除队头后新队列中的元素为:"); PrintQueue(&Q); getch(); } |
|||
实现队列的插入和删除操作 | |||
#include<stdio.h> #include<malloc.h> typedef int QElemType; typedef struct QNode{ QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; LinkQueue Q;//定义一个全局变量 //初始化 //队列的基地址为-1 int InitQueue(LinkQueue *Q) { Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));//存储空间分配 if(!Q->front) { printf("\n存储空间分配失败!"); exit -2; } Q->front->next = NULL; printf("\n队列初始化成功!"); return 1; } //插入元素 e到队尾 int EnQueue(LinkQueue *Q,QElemType e) { QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode));//为新加入元素分配存储空间 if(!p) { printf("\n存储空间分配失败!"); exit -2; } printf("\n请输入要入队列的元素:"); scanf("%d",&e); p->data = e; p->next = NULL; Q->rear->next = p; Q->rear = p; return 1; } //打印队列中的所有元素 int PrintQueue(LinkQueue *Q) { QueuePtr p; p=Q->front; while(Q->front!=Q->rear) { printf("%d\t",Q->front->next->data); Q->front = Q->front->next; } Q->front=p; return 1; } //删除队头元素 e,并返回其值 QElemType DeQueue(LinkQueue *Q) { QueuePtr p; QElemType e; if(Q->front == Q->rear) { printf("\n队列为空,出队列失败!"); return 0; } p = Q->front->next; e = p->data; Q->front->next = p->next; if(Q->rear == p) Q->rear = Q->front; printf("\n队头元素%d出队列成功!",e); free(p); return e; } //获得队头元素 e QElemType GetHead(LinkQueue *Q) { QElemType e; if(Q->front == Q->rear) { printf("\n队列为空,无法得到队头!"); return 0; } e = Q->front->next->data; return e; } //**************主函数**************** main() { int i=0; int n=0; int k; int head,de; InitQueue(&Q); printf("\n请输入要入队列的元素个数:"); scanf("%d",&n); for(i=0;i<n;i++) EnQueue(&Q,k); printf("\n队列中的元素为:"); PrintQueue(&Q); head = GetHead(&Q); printf("\n队头元素为:%d",head); de = DeQueue(&Q); printf("\n删除队头后队列中的元素为:"); PrintQueue(&Q); getch(); } |
|||
实现顺序栈的初始化、PUSH、POP等操作 | |||
#include<stdio.h> #include<malloc.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; void InitStack(SqStack *S) { S->base = (SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S->base) { printf("\n存储分配失败!"); exit -2; } S->top = S->base; S->stacksize = STACK_INIT_SIZE; printf("\n栈初始化成功!"); } SElemType GetTop(SqStack *S) { int e; if(S->top == S->base) { printf("\n栈内没有数据!"); return 0; } e = *(S->top-1); printf("\n栈顶元素为:%d",e); return 1; } void Push(SqStack *S) { SElemType e; printf("\n请输入要入栈的元素:"); scanf("%d",&e); if(S->top - S->base>=S->stacksize) { S->base = (SElemType *)realloc(S->base,(S->stacksize + STACKINCREMENT) *sizeof(SElemType)); if(!S->base) { printf("\n追加存储空间失败!"); exit -2; } S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } *S->top++ = e; } SElemType Pop(SqStack *S) { SElemType e; if(S->top == S->base) { printf("\n栈内没有数据,不能弹出栈顶元素!"); return 0; } e = *--S->top; printf("\n弹出的栈顶元素为:%d",e); return 1; } main() { int i,n; SqStack S; SElemType gettop; InitStack(&S); gettop = GetTop(&S); printf("\n请输入要入栈的元素个数:"); scanf("%d",&n); for(i=0;i<n;i++) Push(&S); gettop = GetTop(&S); Pop(&S); getch(); } |
|||
实现双向链表的初始化、在指定位置插入和删除元素 | |||
#include<stdio.h> #include<malloc.h> typedef int ElemType; typedef struct DuList{ ElemType data; struct DuList *prior; struct DuList *next; }DuList; //双向链表的创建 DuList *CreatList_L( ) { int n,i; DuList *p,*L,*r; L = (DuList *)malloc(sizeof(DuList)); L->prior = NULL; L->next = NULL; r=L; printf("\n请输入元素个数:"); scanf("%d",&n); for(i=1;i<=n;i++) { p = (DuList *)malloc(sizeof(DuList)); printf("\n请输入元素值"); scanf("%d",&p->data); p->next = r->next; r->next = p; p->prior = r; r = r->next; } return(L); } //打印双向链表中的所有元素 Print_DuL(DuList *L) { DuList *p,*r; r = L; if(L->next==NULL) printf("\n没有数据"); while(r->next) { p=r->next; r=r->next; printf("%d\t",p->data); } } //在链表中插入新元素 Insert_DuL(DuList *L) { DuList *p,*s; int i,j,e; p=L; j=0; printf("\n请输入要插入的位置"); scanf("%d",&i); while(p&&j<i) { p=p->next; ++j; } if(!p||j>i) { printf("\n不存在第%d个结点,插入失败!\n",i); return(0); } printf("\n请输入要插入元素:"); scanf("%d",&e); if(!(s = (DuList *)malloc(sizeof(DuList)))) { printf("\n新元素内存分配失败"); return(0); } s->data = e; s->prior = p->prior; p->prior->next = s; s->next = p; p->prior = s; printf("\n插入成功!"); return(1); } //删除双向链表中的某个元素 Delet_DuL(DuList *L) { DuList *p; int i,j; p=L; j=0; printf("\n请输入要删除的结点位置"); scanf("%d",&i); while(p->next&&j<i-1) { p=p->next; ++j; } if(!(p->next)||j>i-1) { printf("\n无此结点,删除失败!"); return(0); } p->prior->next = p->next; p->next->prior = p->prior; free(p); return(1); } //**************************主函数************************* main() { DuList *L; L=CreatList_L(); printf("\n双链表中元素为:"); Print_DuL(L); Insert_DuL(L); printf("\n插入元素后双链表中数据为:"); Print_DuL(L); Delet_DuL(L); printf("\n删除元素后双链表中数据为:"); Print_DuL(L); getch(); } |
|||
合并到原表 | |||
#include"malloc.h" #include"stdio.h" typedef struct list{ int num; struct list *next; }linklist; //创建一个链表 linklist *CreatList(int n) { int x,i; linklist *L,*r,*p; L=(linklist *)malloc(sizeof(linklist)); L->next=NULL; r=L; for(i=1;i<=n;i++) { p=(linklist *)malloc(sizeof(linklist)); printf("\n请输入元素:"); scanf("%d",&p->num); p->next=NULL;/*尾插法*/ r->next=p; r=r->next; } return(L); } //打印链表中的所有元素 PrintLlist(linklist *L) { linklist *p,*r; r=L; if(L->next==NULL)//判断链表是否为空 printf("链表为空!\n"); while(r->next) { p=r->next; r=r->next; printf("%d\t",p->num); } } //合并两个链表 linklist *meagerlist(linklist *L,linklist *H) { int i; int x; linklist *p,*q,*r,*T,*g; p=L; q=H; while(q->next) { x=p->next->num; if(q->next->num==x) { p=p->next; q=q->next; } q->next=p->next; p->next=q; } free(q); p->next=H->next; return(L); } //元素的排序 linklist *SortList(linklist *head) { linklist *p,*q,*small; int temp; for(p=head->next;p->next!=NULL;p=p->next) { small=p; for(q=p->next;q;q=q->next) if(q->num<small->num) small=q; if(small!=p)//采用选择排序的方法 { temp=p->num; p->num=small->num; small->num=temp; } } return(head); } //********************主函数********************** main() { linklist *L,*H,*G,*S; int n;int m;int y; printf("创建链表 A:\n"); printf("输入链表中元素个数:"); scanf("%d",&n); L=CreatList(n); printf("\nA链表中的元素为:"); PrintLlist(L); printf("\n创建链表 B:\n"); printf("输入链表中元素个数:"); scanf("%d",&m); H=CreatList(m); printf("\nB链表中的元素为:"); PrintLlist(H); L=meagerlist(L,H); S=SortList(L); printf("\n合并并排序后的链表:"); PrintLlist(S); getch(); } |
|||
合并 | |||
#include"malloc.h" #include"stdio.h" typedef struct list{ int num; struct list *next; }linklist; //创建一个链表 linklist *CreatList(int n) { int x,i; linklist *L,*r,*p; L=(linklist *)malloc(sizeof(linklist)); L->next=NULL; r=L; for(i=1;i<=n;i++) { p=(linklist *)malloc(sizeof(linklist)); printf("\n请输入元素:"); scanf("%d",&p->num); p->next=NULL;/*尾插法*/ r->next=p; r=r->next; } return(L); } //打印链表中的所有元素 PrintLlist(linklist *L) { linklist *p,*r; r=L; if(L->next==NULL)//判断链表是否为空 printf("链表为空!\n"); while(r->next) { p=r->next; r=r->next; printf("%d\t",p->num); } } //合并两个链表 linklist *meagerlist(linklist *L,linklist *H) { int i; int x; linklist *p,*q,*r,*T,*g; p=L; q=H; while(p->next) { T=(linklist *)malloc(sizeof(linklist));//依次取出链表 A中的数据 T->num=p->next->num; x=T->num; p=p->next; for(q=H;q->next;q=q->next) { if(q->next->num==x) { r=q->next; q->next=q->next->next; free(r); } } } p->next=H->next; return(L); } //元素的排序 linklist *SortList(linklist *head) { linklist *p,*q,*small; int temp; for(p=head->next;p->next!=NULL;p=p->next) { small=p; for(q=p->next;q;q=q->next) if(q->num<small->num) small=q; if(small!=p)//采用选择排序的方法 { temp=p->num; p->num=small->num; small->num=temp; } } return(head); } //********************主函数********************** main() { linklist *L,*H,*G,*S; int n;int m;int y; printf("创建链表 A:\n"); printf("输入链表中元素个数:"); scanf("%d",&n); L=CreatList(n); printf("\nA链表中的元素为:"); PrintLlist(L); printf("\n创建链表 B:\n"); printf("输入链表中元素个数:"); scanf("%d",&m); H=CreatList(m); printf("\nB链表中的元素为:"); PrintLlist(H); G=meagerlist(L,H); S=SortList(G); printf("\n合并并排序后的链表:"); PrintLlist(S); getch(); } |
|||
实现顺序表的初始化、在指定位置插入和删除元素 | |||
#include<stdio.h> #include<string.h> #include<malloc.h> #define MAXLEN 100 #define LISTINCREMENT 10 typedef int ElemType; typedef struct{ ElemType *elem; int length; int listsize; }SqList; SqList L;//定义一个全局变量 //初始化顺序表 int Init_Sq(SqList *L) { L->elem = (ElemType *)malloc(MAXLEN *sizeof(ElemType)); if(!(L->elem)) return(0);/*存储分配失败*/ L->length = 0; L->listsize = MAXLEN; return 1; } //为初始化了的顺序表添加元素 int Creat_Sq(SqList *L,int n) { int i; ElemType *p; ElemType e; for(i=0;i<n;i++) { printf("\n请输入元素值:"); scanf("%d",&e); p = &(L->elem[i]); *p = e; L->length++; } return 1; } //打印顺序表中的所有元素 int Print_Sq(SqList *L) { int i; ElemType *p; ElemType e; for(i=0;i<L->length;i++) { p = &(L->elem[i]); e = *p; printf("%d\t",e); } } //在顺序表中插入一个新元素 int Insert_Sq(SqList *L) { ElemType *p,*q,*newbase; int i,e; p = L->elem; printf("\n请输入要插入的位置:"); scanf("%d",&i); if(i<1||i>=L->length+1) { printf("\n无此位置,插入失败!"); return 0; } printf("\n请输入插入的元素值:"); scanf("%d",&e); if(L->length>=L->listsize) { newbase=(ElemType*)realloc(L->elem,(L->listsize+MAXLEN)*sizeof(ElemType)); if(!newbase) exit(0); L->elem = newbase; L->listsize += LISTINCREMENT; } q=&(L->elem[i-1]); for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L->length; return 1; } //删除顺序表中的某个元素 int Delete_Sq(SqList *L) { int i; int *p,*q; printf("\n请输入要删除的位置:"); scanf("%d",&i); if((i<1)||(i>L->length+1)) { printf("\n不存在第%d个位置,删除失败!"); return(0); } p = &(L->elem[i-1]); q = L->elem+L->length-1; for(++p;p<=q;++p) *(p-1) = *p; --(L->length); return 1; } //*********************主函数************************* main() { int n; int k=0; SqList L; n = Init_Sq(&L); printf("\n顺序表初始化成功!"); printf("\n请输入加入顺序表的元素个数:"); scanf("%d",&k); int c; c = Creat_Sq(&L,k); printf("\n顺序表中元素值为:"); Print_Sq(&L); Insert_Sq(&L); printf("\n插入元素后新顺序表中元素值为:"); Print_Sq(&L); Delete_Sq(&L); printf("\n删除元素后新顺序表中元素值为:"); Print_Sq(&L); getch(); } |
|||
数据结构:实现单链表的初始化、在指定位置插入和删除元素 | |||
#include<stdio.h> #include<malloc.h> typedef struct List{ int data; struct List *next; }LinkList; //创建链表 LinkList *CreatList_L( ) { int n,i; LinkList *p,*L,*r; L = (LinkList *)malloc(sizeof(LinkList)); L->next = NULL; r=L; printf("\n请输入元素个数:"); scanf("%d",&n); for(i=1;i<=n;i++) { p = (LinkList *)malloc(sizeof(LinkList)); printf("\n请输入元素值"); scanf("%d",&p->data); p->next = NULL; r->next = p; r = r->next;/*尾插法*/ } return (L); } //将链表中的元素打印出来 Print_L(LinkList *L) { LinkList *p,*r; r=L; if(L->next==NULL) printf("\n没有数据"); while(r->next) { p=r->next; r=r->next; printf("%d\n",p->data); } } //在链表中插入元素 Insert_L(LinkList *L) { LinkList *p,*s; int i,j,e; p=L; j=0; printf("\n请输入要插入的位置"); scanf("%d",&i); while(p&&j<i-1) { p=p->next; ++j; } if(!p||j>i-1) { printf("\n不存在第%d个结点,插入失败!\n",i); return(0); } printf("\n请输入要插入元素:"); scanf("%d",&e); s = (LinkList *)malloc(sizeof(LinkList)); s->data = e; s->next = p->next; p->next = s; printf("\n插入成功!"); return(1); } //删除链表中的某个元素 Delet_L(LinkList *L) { LinkList *p,*q; int i,j; p=L; j=0; printf("\n请输入要删除的结点位置"); scanf("%d",&i); while(p->next&&j<i-1) { p=p->next; ++j; } if(!(p->next)||j>i-1) { printf("\n无此结点,删除失败!"); return(0); } q=p->next; p->next = q->next; free(q); printf("\n删除成功!"); return(1); } //*********************主函数************************* main() { LinkList *L; L=CreatList_L(); printf("\n链表中元素为:"); Print_L(L); Insert_L(L); printf("\n插入元素后链表中数据为:"); Print_L(L); Delet_L(L); printf("\n删除元素后链表中数据为:"); Print_L(L); getch(); } |
|||
课程实验8 | |||
#include<stdio.h> #define NUM 4 struct student { long no; char name[10]; char sex; int age; int score; }; main() { struct student stu[NUM]; int i,n,s,num; clrscr(); printf("The Num of Stu:\n"); scanf("%d",&num); getchar(); for (i=0;i<num;i++) { printf("Student%d\n",i+1); printf("Number:"); scanf("%ld",&stu[i].no); printf("Name:"); getchar(); scanf("%s",stu[i].name); printf("Sex:"); getchar(); scanf("%c",&stu[i].sex); printf("Age:"); getchar(); scanf("%d",&stu[i].age); printf("Score:"); getchar(); scanf("%d",&stu[i].score); getchar(); } printf("Number\tName\tSex\tAge\tScore\n\n"); for (i=0;i<num;i++) { printf("%d\t",stu[i].no); printf("%s\t",stu[i].name); printf("%c\t",stu[i].sex); printf("%d\t",stu[i].age); printf("%d\t\n",stu[i].score); } getch(); for(i=0,n=0;i<num;i++) { if(stu[i].sex=='m') n++; } printf("nan=%d\nnv=%d\n",n,num-n); getch(); for(i=0,s=0;i<num;i++) { s=s+stu[i].score; } printf("PJscore=%d\n",s/num); getch(); printf("Di yu PJscore:\n"); printf("Number\tName\tSex\tAge\tScore\n\n"); for(i=0;i<num;i++) { if(stu[i].score<s/num) { printf("%d\t",stu[i].no); printf("%s\t",stu[i].name); printf("%c\t",stu[i].sex); printf("%d\t",stu[i].age); printf("%d\t\n",stu[i].score); } } getch(); } |