⑴ c++鏈表簡單演算法設計題,幫同學忙,求代碼,謝謝
LinkList delnode(LinkList head,DataType x)
{
if (head == NULL || head->next == NULL) return head;
LinkNode *p = head->next;
LinkNode *pPrev = head;
while (p != NULL)
{
if (p->data == x)
{
pPrev->next = p->next;
free(p);
p = pPrev->next;
}
else
{
pPrev = pPrev->next;
p = p->next;
}
}
return head;
}
⑵ 幫忙寫出一個簡單的演算法唄。設順序表S中元素遞增有序,編寫演算法刪除S中所有大於K1小於K2的元素。謝謝啦
int min,max;
int flag f=1,g=1;
for(int i=0;i<n;i++)
{
if (f==1&&a[i]>k1){min=i;f=0;}
else if(g==1&&a[i]<k2){max=k2;g=0}
}
if(j==0&&g==0)
{
for(int i=min,int j=max;j<n;i++,j++)
{
a[i]=a[j];
if(j==n-1)a[i+1]=null;
}
}
⑶ 求一個簡單的線性表(鏈式的,用C語言)
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
/************************************************************************/
/* 常量定義 */
/************************************************************************/
#define ElemType int
#define Status int
#define TRUE 1
#define OK 1
#define FALSE 0
#define ERROR -1
/************************************************************************/
/* 線性表的單鏈表存儲結構*/
/************************************************************************/
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
//////////////////////////////////////////////////////////////////////////
//
// 帶有頭結點的單鏈表的基本操作(13個)
//
//////////////////////////////////////////////////////////////////////////
/************************************************************************/
/* 操作結果:構造一個空的線性表L */
/************************************************************************/
void InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(struct LNode)); /* 產生頭結點,並使L指向此頭結點 */
if( !*L ) /* 存儲分配失敗 */
exit(OVERFLOW);
(*L)->next = NULL; /* 指針域為空 */
}
/************************************************************************/
/* 初始條件:線性表L已存在。*/
/* 操作結果:銷毀線性表L */
/************************************************************************/
void DestroyList(LinkList *L)
{
LinkList q;
while(*L)
{
q = (*L)->next;
free(*L);
*L=q;
}
}
/************************************************************************/
/* 初始條件:線性表L已存在。*/
/* 操作結果:將L重置為空表 */
/************************************************************************/
void ClearList(LinkList L) /* 不改變L */
{
LinkList p, q;
p = L->next; /* p指向第一個結點 */
while(p) /* 沒到表尾 */
{
q = p->next;
free(p);
p = q;
}
L->next = NULL; /* 頭結點指針域為空 */
}
/************************************************************************/
/* 初始條件:線性表L已存在。*/
/* 操作結果:若L為空表,則返回TRUE,否則返回FALSE */
/************************************************************************/
Status ListEmpty(LinkList L)
{
/* 非空 */
return (L->next) ? FALSE : TRUE;
}
/************************************************************************/
/* 初始條件:線性表L已存在。操作結果:返回L中數據元素個數 */
/************************************************************************/
int ListLength(LinkList L)
{
int i = 0;
LinkList p = L->next; /* p指向第一個結點 */
while(p) /* 沒到表尾 */
{
i++;
p = p->next;
}
return i;
}
/************************************************************************/
/* L為帶頭結點的單鏈表的頭指針。*/
/* 當第i個元素存在時,其值賦給e並返回OK,否則返回ERROR */
/************************************************************************/
Status GetElem(LinkList L, int i, ElemType *e) /* 演算法2.8 */
{
int j = 1; /* j為計數器 */
LinkList p = L->next; /* p指向第一個結點 */
while(p && j < i) /* 順指針向後查找,直到p指向第i個元素或p為空 */
{
p = p->next;
j++;
}
if( !p || j > i) return ERROR; /* 第i個元素不存在 */
*e = p->data; /* 取第i個元素 */
return OK;
}
/************************************************************************/
/* 初始條件: 線性表L已存在,compare()是數據元素判定函數(滿足為1,否則為0)*/
/* 操作結果: 返回L中第1個與e滿足關系compare()的數據元素的位序。 */
/* 若這樣的數據元素不存在,則返回值為0 */
/************************************************************************/
int LocateElem(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType))
{
int i = 0;
LinkList p = L->next;
while(p)
{
i++;
if(compare(p->data,e)) /* 找到這樣的數據元素 */
return i;
p=p->next;
}
return 0;
}
/************************************************************************/
/* 初始條件: 線性表L已存在 */
/* 操作結果: 若cur_e是L的數據元素,且不是第一個,則用pre_e返回它的前驅 */
/* 返回OK;否則操作失敗,pre_e無定義,返回INFEASIBLE */
/************************************************************************/
Status PriorElem(LinkList L, ElemType cur_e, ElemType *pre_e)
{
LinkList q, p = L->next; /* p指向第一個結點 */
while(p->next) /* p所指結點有後繼 */
{
q = p->next; /* q為p的後繼 */
if(q->data == cur_e)
{
*pre_e = p->data;
return OK;
}
p = q; /* p向後移 */
}
return ERROR;
}
/*************************************************************************/
/* 初始條件:線性表L已存在 */
/* 操作結果:若cur_e是L的數據元素,且不是最後一個,則用next_e返回它的後繼*/
/* 返回OK; 否則操作失敗,next_e無定義,返回INFEASIBLE */
/*************************************************************************/
Status NextElem(LinkList L, ElemType cur_e, ElemType *next_e)
{
LinkList p = L->next; /* p指向第一個結點 */
while(p->next) /* p所指結點有後繼 */
{
if(p->data == cur_e)
{
*next_e = p->next->data;
return OK;
}
p = p->next;
}
return ERROR;
}
/************************************************************************/
/* 在帶頭結點的單鏈線性表L中第i個位置之前插入元素e */
/************************************************************************/
Status ListInsert(LinkList L, int i, ElemType e)
{
int j = 0;
LinkList p = L, s;
while( p && j < i-1) /* 尋找第i-1個結點 */
{
p = p->next;
j++;
}
if( !p|| j > i-1) return ERROR;/* i小於1或者大於表長 */
s = (LinkList)malloc(sizeof(struct LNode)); /* 生成新結點 */
s->data = e; /* 插入L中 */
s->next = p->next;
p->next = s;
return OK;
}
/************************************************************************/
/* 在帶頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值 */
/************************************************************************/
Status ListDelete(LinkList L, int i, ElemType *e)
{
int j = 0;
LinkList p = L, q;
while(p->next && j < i-1) /* 尋找第i個結點,並令p指向其前嶇 */
{
p = p->next;
j++;
}
if( !p->next || j > i-1) /* 刪除位置不合理 */
return ERROR;
q = p->next; /* 刪除並釋放結點 */
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
/************************************************************************/
/* 初始條件:線性表L已存在。操作結果:依次對L的每個數據元素調用函數vi() */
/************************************************************************/
void ListTraverse(LinkList L, void(*vi)(ElemType))
{
LinkList p = L->next;
while(p)
{
vi(p->data);
p = p->next;
}
printf("\n");
}
/************************************************************************/
/* 初始條件:線性表L已存在。列印鏈表的data域 */
/************************************************************************/
void ListPrint(LinkList L)
{
LinkList p = L->next;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void printInt(int data)
{
printf("%d ", data);
}
/************************************************************************/
/* 插入排序 */
/************************************************************************/
void ListSort(LinkList L)
{
LinkList first, p, q; //為原鏈表剩下用於直接插入排序的節點頭指針
LinkList t; //臨時指針變數:插入節點
//原鏈表剩下用於直接插入排序的節點鏈表
first = L->next;
//只含有一個節點的鏈表的有序鏈表
L->next = NULL;
//遍歷剩下無序的鏈表
while (first != NULL)
{
//無序節點在有序鏈表中找插入的位置
for (t = first, q = L; ((q != NULL) && (q->data < t->data)); p = q, q = q->next);
//退出for循環,就是找到了插入的位置
first = first->next;
p->next = t;
//完成插入動作
t->next = q;
}
}
//排序,指針交換法
void ListSort1(LinkList L)
{
LinkList head = L->next;//head指向除頭結點以外的鏈表
LinkList pre_p; //p的前驅結點
LinkList pre_q; //q的前驅結點
LinkList min; //最小的結點
LinkList p, q, temp;
for(p = head; p->next; pre_p = min, p = min->next)
{
//找出最小的結點
for(min = p, q = p; q->next; q = q->next)
{
if(q->next->data < min->data)
{
pre_q = q;
min = q->next;
}
}
//如果最小是自己 就不需要交換
if(min == p) continue;
//如果p是指向head的結點,則鏈表直接指向min
if(p == head)
L->next = min;
else
pre_p->next = min;
temp = min->next;
if(p->next == min)
{
min->next = p;
p->next = temp;
}
else
{
min->next = p->next;
pre_q->next = p;
p->next = temp;
}
}
}
//排序,數據選擇法排序
void ListSort2(LinkList L)
{
LinkList head = L->next;//head指向除頭結點以外的鏈表
LinkList min; //最小的結點
LinkList p, q; //遍歷鏈表指針
int temp;
for (p = head; p->next; p = p->next)
{
//在p指針後的鏈表選取最小的結點
for (min = p, q = p->next; q; q = q->next)
{
if (q->data < min->data)
min = q;
}
//兩者結點值不相等,數據交換
if (min->data != p->data)
{
temp = min->data;
min->data = p->data;
p->data = temp;
}
}
}
void ListSort3(LinkList L)
{
LinkList first; //指向鏈表L第一個結點,除頭結點
LinkList pre; //指向first的前驅結點
LinkList last; //指向first指向排好序的最後一個結點
LinkList rest; //指向未排好序的第一個結點,即鏈表第二個結點
LinkList curr; //指向當前結點
first = L->next; //指向第一個結點
if(first == NULL) return;
pre = L ; //pre指向first的前驅結點
last = first; //last指向排好序的最後一個結點
rest = first->next; //指向剩餘的結點
first->next = NULL; //first斷鏈
while (rest) //當餘下的結點不為空
{
//保存當前結點
curr = rest;
//取下一個結點
rest = rest->next;
//當結點小於第一個結點,則鏈接到first前面
if( curr->data < first->data )
{
pre->next = curr;
curr->next = first;
pre = curr;
}
//當前結點大於第一個結點,則鏈接到last後
else if(curr->data > first->data)
{
curr->next = last->next;
last->next = curr;
last = curr;
}
//當前結點與第一個結點相等,則鏈接到first後面
else
{
curr->next = first->next;
first->next = curr;
}
}
}
void main()
{
LinkList L;
InitList(&L);
ListInsert(L, 1, 6);
ListInsert(L, 2, 3);
ListInsert(L, 3, 67);
ListInsert(L, 4, 2);
ListInsert(L, 5, 15);
ListInsert(L, 6, 13);
ListInsert(L, 7, 10);
ListInsert(L, 8, 6);
ListInsert(L, 9, 4);
ListSort3(L);
ListTraverse(L, printInt);
}
⑷ EXCEL表格製作,求助解決思路及演算法
=IF(OR(D5<1,D5>2),"",(INDEX(B2:J2,MATCH(LOOKUP(D5,B1:J1,B2:J2),B2:J2,)+1)-LOOKUP(D5,B1:J1,B2:J2))*(D5-LOOKUP(D5,B1:J1))/(INDEX(B1:J1,MATCH(LOOKUP(D5,B1:J1,B2:J2),B2:J2,)+1)-LOOKUP(D5,B1:J1))+LOOKUP(D5,B1:J1,B2:J2))
⑸ 跪求分別寫一個線性表的插入的完整演算法
//Try:
#include<iostream>
#include<stdlib.h>
usingnamespacestd;
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;//Status是函數的類型,其值是函數結果狀態碼
typedefintElemType;//ElemType為數據元素,暫定為int型
#defineLIST_INIT_SIZE100//線性表存儲空間的初始分配量
#defineLIST_INCREMENT10//線性表存儲空間的分配增量
typedefstruct//線性表順序存儲結構
{
ElemType*elem;//存儲空間基址
intlength;//線性表當前長度
intlistsize;//當前分配的存儲容量(以sizeof(ElemType)為單位)
}SqList;
StatusInitList_SL(SqList&L)//初始化順序線性表
{
//構造一個空的線性表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);//存儲分配失敗
L.length=0;//空表長度為0
L.listsize=LIST_INIT_SIZE;//初始存儲容量
returnOK;
}
Statusvisit(ElemTypee)//訪問元素
{
cout<<e<<"";
returnOK;
}
StatusListEmpty_SL(SqListL)//判斷線性表是否為空
{
if(L.length==0)returnTRUE;
elsereturnFALSE;
}
StatusGetElem_SL(SqListL,inti,ElemType&e)//用e返回L中第i個數據元素的值(注意:下標由0開始的)
{
if(L.length==0/*||i<1*/||i>L.length)returnERROR;
e=*(L.elem+i);
returnOK;
}
StatusClearList_SL(SqList&L)//將線性表置為空表
{
L.length=0;
returnOK;
}
intLocateElem_SL(SqList&L,ElemTypee)//返回L中第1個與e滿足關系的數據元素的位序
{
inti;
if(L.length==0)return0;
for(i=0;i<L.length;i++)
{
if(e==*(L.elem+i))//找到
break;
}
if(i>=L.length)return0;//沒有找到
return(i+1);
}
StatusListDelete_SL(SqList&L,inti,ElemType&e)
{
//在順序線性表L中刪除第i個元素,並用e返回其值
//i的合法值為1<=i<=ListLength_SL(L)
ElemType*p,*q;
if((i<1)||(i>L.length))returnERROR;//i的值不合法
p=&(L.elem[i-1]);//p為被刪除元素的位置
e=*p;//被刪除元素的值賦給e
q=L.elem+L.length-1;//表尾元素的位置
for(++p/*++p是指被刪除元素的下一個元素開始左移*/;p<=q;++p)//被刪除元素之後的元素左移
*(p-1)=*p;
--L.length;//表長減1
returnOK;
}
StatusListTraverse(SqListL)//遍歷線性表元素
{
inti;
for(i=0;i<L.length;i++)
visit(*(L.elem+i));
cout<<endl;
returnOK;
}
StatusListInsert_SL(SqList&L,inti,ElemTypee)
{
//在L中第i個位置之前插入新的元素e,
//i的合法值為1<=i<=ListLength_SL(L)+1
ElemType*newbase,*q,*p;
if(i<1||i>L.length+1)returnERROR;//i值不合法
if(L.length>=L.listsize)
{//當前存儲空間已滿,增加分配
newbase=(ElemType*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);//存儲分配失敗
L.elem=newbase;//新基址
L.listsize+=LIST_INCREMENT;//增加存儲容量
}
q=&(L.elem[i-1]);//q為插入位置
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;//插入e
++L.length;//表長增1
returnOK;
}
intListLength_SL(SqListL)//線性表長度
{
return(L.length);
}
intmain(void)
{
/***************************
Callthealgorithminhere.
****************************/
return1;
}
這個是最簡單的線性表,它沒有使用到類.都是過程化。
⑹ 如何製作一張表格
Microsoft Word 提供了幾種創建表格 (表格:表格由一行或多行單元格組成,用於顯示數字和其他項以便快速引用和分析。表格中的項被組織為行和列。)的方法。最適用的方法與您工作的方式以及所需的表格的復雜與簡單程度有關。
單擊要創建表格的位置。
在「常用」工具欄 (工具欄:包含可用於執行命令的按鈕和選項的欄。要顯示工具欄,請按 Alt 然後按 Shift+F10。)上,單擊「插入表格」 。
拖動滑鼠,選定所需的行、列數。
可執行下列任意操作:
使用「插入表格」
使用該步驟可以在將表格插入到文檔之前選擇表格的大小和格式。
單擊要創建表格的位置。
在「表格」菜單上,指向「插入」,再單擊「表格」。
在「表格尺寸」下,選擇所需的行數和列數。
在「『自動調整』操作」下,選擇調整表格大小的選項。
若要使用內置的表格格式,請單擊「自動套用格式」。
選擇所需選項。
繪制更復雜的表格
可以繪制復雜的表格,例如,包含不同高度的單元格 (單元格:由工作表或表格中交叉的行與列形成的框,可在該框中輸入信息。)或每行包含的列數不同。
單擊要創建表格的位置。
在「表格」菜單上,單擊「繪製表格」。
「表格和邊框」工具欄顯示出來,指針變為筆形。
要確定表格的外圍邊框,可以先繪制一個矩形。然後在矩形內繪制行、列框線。
若要清除一條或一組線,請單擊「表格和邊框」工具欄上的「擦除」 ,在單擊需要擦除的線。
表格創建完畢後,單擊其中的單元格,然後便可鍵入文字或插入圖形。
注釋 繪製表格時,按住 Ctrl 可以自動應用文字環繞格式。
在表格中創建表格
創建嵌套表格 (嵌套表格:插入到表格單元格中的表格。如果用一個表格布局頁面,並希望用另一個表格組織信息,則可以插入一個嵌套表格。)以設計網頁。可以將網頁想像為一個包含其他表格的大表格,將文本和圖形置於不同的表格單元格之內,以幫助您排列頁面中的不同部分。
在「表格」菜單上,單擊「繪製表格」。
「表格和邊框」工具欄顯示出來,指針變為筆形。
將筆形指針移動到要創建嵌套表格(即表格中的表格)的單元格中。
繪制新表格。先繪制一個矩形以確定表格的邊框,然後在矩形中繪制行、列的邊框線。
嵌套表格創建完成後,請單擊某個單元格,就可以開始鍵入文字或插入圖形了。
注釋 如果有一個原有表格,可將其復制並粘貼到另一個表格內部。
⑺ excel 2003中,一張工資表,如何求同一個姓氏的工資和用什麼函數最簡單
建立《工資表》,如下(模擬的Excel表):
行 A 列 B列 C列 D列 E列 F列 G列 ......
1 序號 姓名 工資 姓氏 工資總和
2 1 張三 100 張氏 【此處輸入公式】
3 2 王五 200 王氏 【此處輸入公式】
4 3 張二 100 劉氏 【此處輸入公式】
5 4 王六 240
6 5 王三 320
7 6 劉二 180
8 7 張七 260
9 8 劉三 150
.... ..... ........ .......
求同一個姓氏的工資和:
張氏工資總和:在F列的F2單元格輸入以下公式:
=SUMIF($B$100:$B$100,CONCATENATE(LEFT($E2,1),"*"),$C$100:$C$100)
用滑鼠下托復制功能,將F2單元格中的函數公式復制到F列的其他單元格;就可分別得到「王氏、劉氏、.........」的工資總和。滑鼠下托復制「王氏、劉氏......」所對應的工資總所在的單元格中的函數公式為:
王氏工資總和:在F列的F3單元格,顯示的公式為:
=SUMIF($B$100:$B$100,CONCATENATE(LEFT($E3,1),"*"),$C$100:$C$100)
劉氏工資總和:在F列的F2單元格,顯示的公式為:
=SUMIF($B$100:$B$100,CONCATENATE(LEFT($E4,1),"*"),$C$100:$C$100)
【補充說明】:
SUMIF函數的語法:
SUMIF(range, criteria, [sum_range])
1)range為:作為計算某單元格區域的值的條件單元格區域;通俗稱「條件單元格區域」;
2)criteria為:用於確定對哪些單元格求和的條件;
3)[sum_range]為:要求和的實際單元格
那麼,在上述給的函數公式(即:如下):
=SUMIF($B$100:$B$100,CONCATENATE(LEFT($E2,1),"*"),$C$100:$C$100)
其SUMIF函數語法解讀如下:
1)range為:條件單元格區域,$B$100:$B$100
2)criteria為:用於確定對哪些單元格求和的條件,CONCATENATE(LEFT($E2,1),"*")
也就是,單元格E2中含有第一個字元+通配符(*),即:王*,代錶王姓的人
3)[sum_range]為:要求和的實際單元格,$C$100:$C$100
如果《工資表》有1000行,那麼,上述給的函數公式:
=SUMIF($B$100:$B$100,CONCATENATE(LEFT($E2,1),"*"),$C$100:$C$100)
中的「條件單元格區域」、「要求和的實際單元格」必須改變,變更後的函數公式為:
=SUMIF($B$1000:$B$1000,CONCATENATE(LEFT($E2,1),"*"),$C$1000:$C$1000)
如果《工資表》有1100行、1200行........行,依此類推修改公式。
⑻ 鍾表的夾角演算法
就180°啊,他們剛好相差60+30分鍾,如果變換一下比如表1點59分到3點11分就按如下方法來:
方法1.最簡單的辦法就是:拿個有指針的標,把他們調到相應位置,數間隔多少個,然後再乘以每隔的度數即可完工。
方法2.直接算了,360°/
60(隔數)=6°1點45分到3點15分的夾角相當於2點45分到3點15分,也不是什麼夾角,就是一直線180°