[121] 编写UNIX/Linux命令以列出目录中所有文件的名称(例如/usr/bin/dir/)(及其子目录),文件应该包含不区分大小写的“I am preparing for Interview”。
grep -ilr “I am preparing for Interview” /usr/bin/dir/*
foreach x (`cat /usr/home/file.txt`)
foreach> cd $x
foreach> script.pl
foreach> end
grep -v “^$” file1.txt > file2.txt
find . -name “file.txt” OR find -name “file.txt”
find /usr/bin/DIR -name “file.txt”
find -maxdepth 1 -name “file.txt”
find . -name “*dummy*”
find . -iname “file”
find -not -name “file.txt”
! find
crontab -l
crontab -u <user_name> -l
crontab -r
crontab -u <user_name> -r
crontab -e
30 18 * * * <command_to_invoke_your_process>
* * * * * <command_to_invoke_your_process>
30 6 1-20 * * <command_to_invoke_your_process>
30 6 18 * * 6 <command_to_invoke_your_process> (assuming Sunday is represented by 0)
什么是大小端请参考问题[32]
#include <stdio.h>
int main() {
unsigned int i = 1;
char *c = (char*)&i;
if (*c)
printf("Little Endian \n");
else
printf("Big Endian \n");
return 0;
}
a = 10;
b = a++;
c = ++a;
b等于10,而c等于12。后置自增运算符仅在赋值后才进行自增,因此b得到的是自增前的值。前置增量运算符将首先进行自增,因此a将从11(在b = a++后变为11)增加到12
#include<stdio.h>
int xyz=10;
int main() {
int xyz=20;
printf("%d",xyz);
return 0;
}
变量xyz定义了全局变量和局部变量,而在函数中,优先调用的是局部变量,所以将为打印出20.
int main() {
int x=4;
float y = * (float *) &x;
return 0;
}
一个很小的值。一些编译器可能会将答案显示为0。“(float *)&x”,告诉编译器指针指向存储在内存位置的浮点数。 浮点数的存储方式不同于整数(对于浮点数,位[31]表示带符号的位,位[30:23]表示指数,位[22:0]表示分数)。因此,当解释为浮点数(00000000000000000000000000000100)时,值将为非常小。
#include<stdio.h>
int main() {
int i=0;
for(i=0;i<20;i++) {
switch(i) {
case 0:i+=5;
case 1:i+=2;
case 5:i+=5;
default: i+=4;
break;
}
printf("%d\n",i);
}
return 0;
}
输出是16,21。
注意两点,i在循环内进行了修改,case后没有跟着break。第一次进入循环,i将一次加5 2 5 4,然后打印输出16,最后再加1。第二次直接进入default,加4,然后输出21。
int factorial (int x) {
if ( (x==0) || (x==1) )
return 1;
else
return (x*factorial(x-1));
}
int fibonacci (int num){
if( (num==0) || (num==1) )
return num;
else
return (fibonacci(num-1) + fibonacci(num-2));
}
#include <stdio.h>
int main() {
int x = 10000;
double y = 56;
int *p = &x;
double *q = &y;
printf("p and q are %d and %d", sizeof(p), sizeof(q));
return 0;
}
输出是p and q are 8 and 8 。
由于“p”和“q”是指针,因此它们只不过是64位计算机中的地址。无论它们指向整数还是双精度数据类型,两者的大小均为64位(8字节)。
链表是由一组节点组成的数据结构,这些节点一起代表一个序列。链表是由一组节点组成的数据结构,这些节点一起代表一个序列。如果我们不知道要存储的数据量,则首选链表。例如:我们可以在员工管理系统中使用链接列表,在这里我们可以轻松地添加新员工的记录(添加新节点-动态内存分配),删除旧员工的记录(删除节点),编辑 员工记录(在节点中编辑数据)。
在[136]-[140]中,使用下列变量和定义:
struct node;
typedef struct node NODE;
typedef int Element;
// A pointer to a node structure
typedef NODE *LINK;
// A node defined as having an element of data
// and a pointer to another node
struct node { Element elem; LINK next; };
// The Head or start of the List
typedef struct { int size; LINK start; } ListHead;
要创建单链表,我们需要:
请参考以下函数来创建单链表:
ListHead createList() {
ListHead h;
h.size = 0;
h.start = NULL;
return h;
}
在链表(h)的头部插入元素(e)时,我们需要:
ListHead InsertElementAtHead(Element e, ListHead h) {
LINK nl= (LINK) malloc (sizeof(NODE));
nl->elem = e;
nl->next = h.start;
h.start= nl;
h.size++;
return h;
}
在链接列表(h)的末尾插入元素(e)时,我们需要:
ListHead InsertElementAtTail(Element e, ListHead h) {
LINK temp;
LINK nl;
nl=(LINK) malloc (sizeof(NODE));
nl->elem=e; nl->next=NULL;
if(h.start==NULL)
h.start=nl;
else {
temp=h.start;
while(temp->next!=NULL)
temp=temp->next;
temp->next=nl;
}
h.size++;
return h;
}
在链表(h)中的pos处插入元素(e)时,我们需要:
ListHead InsertAtPos(Element e, ListHead h, int pos) {
LINK temp;
LINK nl;
nl=(LINK)malloc(sizeof(NODE));
nl->elem=e;
int count=0;
if(pos>h.size) {
printf("Error: Wrong position \n");
return h;
}
if(pos==0) {
nl->next=h.start;
h.start=nl;
} else {
for (temp = h.start; count<(pos-2); temp = temp->next, count++) ;
nl->next=temp->next;
temp->next=nl;
}
h.size++;
return h;
}
从链表(h)中删除元素(e)时,我们需要:
1.检查链表是否为空。如果为空,则无需删除任何内容。
2.如果链表不为空,则需要遍历链表以找到包含元素(e)的节点。找到节点之后,我们需要在要删除的节点之前更改节点中的“next”指针,以指向要删除的节点的“next”指针中存的值。
3.减小链表HEAD中的“size”变量(因为删除了节点)。
ListHead DeleteElement(Element e, ListHead h) {
LINK cur, prev;
cur=h.start;
if(cur==NULL) {
printf ("Empty List \n");
return h;
}
while(cur!=NULL) {
if(cur->elem==e) {
if(cur==h.start)
h.start=cur->next;
else
prev->next=cur->next;
free(cur);
h.size--;
break;
}
prev=cur;
cur=cur->next;
}
return h;
}