A. c語言編程 數據結構題
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#defineelemTypeint /*單鏈表元素數據類型*/
#defineLNODE_SIZEsizeof(structlNode) /*單鏈表結點空間大小*/
#definestatusint /*狀態型變數*/
#defineOVERFLOW-1 /*內存溢出狀態碼*/
#defineERROR0 /*錯誤狀態碼*/
#defineOK1 /*正確狀態碼*/
/*單鏈表數據結構*/
typedefstructlNode{
elemTypedata;
structlNode*next;
}lNode,*linkList;
/*初始化*/
/*操作結果:構造一個空的單鏈表L*/
voidinitList(linkList*L){
*L=(linkList)malloc(LNODE_SIZE);/*產生頭結點,並使L指向此頭結點*/
if(!*L)/*內存分配失敗*/
exit(OVERFLOW);
(*L)->next=NULL;/*指針域為空*/
}
/*銷毀*/
/*初始條件:單鏈表L已存在。操作結果:銷毀單鏈表L*/
voiddestroyList(linkListL){
linkListp,q;
p=L->next;/*p指向第一個結點*/
while(p){/*沒到表尾*/
q=p->next;
free(p);
p=q;
}
free(L);
}
/*判斷單鏈表是否為空*/
/*初始條件:單鏈表L已存在。操作結果:若L為空表,則返回TRUE,否則返回FALSE*/
intlistIsEmpty(linkListL){
returnL->next==NULL;
}
/*尋找指定特徵(compare)元素的位序*/
/*初始條件:線性表L已存在,compare()是數據元素判定函數(滿足為1,否則為0)*/
/*操作結果:返回L中第1個與e滿足關系compare()的數據元素的位序*/
/*若這樣的數據元素不存在,則返回值為0*/
intlocateElem(linkListL,elemTypee,status(*compare)(elemType,elemType)){
inti=0;
linkListp=L->next;
while(p){
i++;
if(compare(p->data,e))/*找到這樣的數據元素*/
returni;
p=p->next;
}
return0;
}
/*數據元素判定*/
/*滿足為1,否則為0*/
intcompare(elemTypedes,elemTypesrc){
returndes==src;
}
/*單鏈表指定位置插入新元素*/
/*操作結果:在帶頭結點的單鏈表L中第i個位置之前插入元素e*/
statuslistInsertNode(linkListL,inti,elemTypee){
intj=0;
linkListp=L,s;
while(p&&j<i-1){/*尋找第i-1個結點*/
p=p->next;
j++;
}
if(!p||j>i-1)/*插入位置不合理:i小於1或者大於表長*/
returnERROR;
/*生成新結點,並插入L中*/
s=(linkList)malloc(LNODE_SIZE);
if(!s)/*內存分配失敗*/
exit(OVERFLOW);
s->data=e;
s->next=p->next;
p->next=s;
returnOK;
}
/*刪除單鏈表指定位置元素*/
/*操作結果:在帶頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值*/
statuslistDeleteNode(linkListL,inti,elemType*e){
intj=0;
linkListp=L,q;
while(p->next&&j<i-1){/*尋找第i個結點,並令p指向其前驅結點*/
p=p->next;
j++;
}
if(!p->next||j>i-1)/*刪除位置不合理:i小於1或者大於表長*/
returnERROR;
/*刪除並釋放結點*/
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
returnOK;
}
/*列印鏈表內容*/
/*初始條件:單鏈表L已存在。操作結果:當鏈表不為空時,列印鏈表內容並返回OK,否則返回ERROR*/
statusprintList(linkListL){
linkListp=L->next;/*p指向第一個結點*/
if(listIsEmpty(L)){
puts("Thelinklistisempty!");
returnERROR;
}
while(p){
printf("%d ",p->data);
p=p->next;
}
putchar(' ');
returnOK;
}
intmain(void){
linkListL;
elemTypee;
intindex;
/*初始化鏈表*/
initList(&L);
/*插入若干元素*/
listInsertNode(L,1,1);
listInsertNode(L,2,4);
listInsertNode(L,3,6);
listInsertNode(L,4,7);
listInsertNode(L,5,10);
printf("初始鏈表內容: ");
printList(L);
putchar(' ');
/*尋找數據為6的結點位置*/
index=locateElem(L,6,&compare);
printf("數據為6的結點位置: %d ",index);
putchar(' ');
/*在數據為6的結點之前插入數據為5的結點*/
listInsertNode(L,index,5);
printf("當前鏈表內容: ");
printList(L);
destroyList(L);
getch();/*屏幕暫留*/
return0;
}
B. 求助數據結構題用C語言做
1: 因為要刪除那些即在B表又在C表中的元素,所以A,B,C三個表中都會有這個元素。那麼用指針遍歷A表,用另外兩個指針遍歷B,C。查找B,C中同A的元素,因為3個表都是有序的,可以採用些簡單的比較。找到後刪除。
2:void AE(stack &s)
{
int stack (s); //得到傳遞過來的棧
push(s,3); // 3進棧
push(s,4); // 4進棧
int x=pop(s)+2*pop(s); // x = 3 + 2 * 4
push(s,x); // x 進棧
int a[5]={2,5,8,22,15};
for(j=0;j<5;j++)
push(s,a[i]) // A數組進棧
while(!stackempty(s)) // 直到棧空
printf("%d",2*pop(s)); //輸出 2*棧中每個元素
結果自己想了。
C. c語言編程 數據結構題
(⊙o⊙)…我昨天看到了,寫完代碼之後找不到問題了
。一會兒回去把代碼貼上來。
給你參考參考:
/*
*Filename:main.c
*/
#include<stdio.h>
#include"queue.h"
intmain(void){
inti;
queueque;
/*
*創建一個大小為10的隊列,對隊列進行入隊,出隊操作
*/
que=create_queue(10);
for(i=0;i<10;i++){
in_queue(que,i);
}
for(i=0;i<5;i++){
printf("%d ",out_queue(que));
}
printf(" 隊列是否為空?");
if(is_empty(que)){
printf("TRUE ");
}else{
printf("FALSE 將隊列置空 ");
set_queue_empty(que);
}
if(is_empty(que)){
printf("隊列為空 ");
}
free_queue(que);
return0;
}
/*
*Filename:queue.c
*/
#include"queue.h"
#include<stdlib.h>
/*
*創建大小為size的循環隊列
*/
queuecreate_queue(size_tsize){
q_valuetemp=NULL;
queueque=NULL;
/*
*創建隊列指針
*/
que=(queue)malloc(sizeof(struct_queue));
que->size=size;
/*
*創建隊列值,初始化為-1
*/
que->rear=(q_value)malloc(sizeof(struct_que_value));
que->rear->value=-1;
temp=que->rear;
while(--size){
que->front=(q_value)malloc(sizeof(struct_que_value));
que->front->next=temp;
que->front->value=-1;
temp=que->front;
}
/*
*頭尾相連成為循環隊列
*/
que->rear->next=que->front;
que->rear=que->front;
returnque;
}
/*
*將隊列設置為空
*/
voidset_queue_empty(queueque){
while(que->front!=que->rear){
que->rear->value=-1;
que->rear=que->rear->next;
}
que->front->value=-1;
que->front=que->rear;
}
/*
*判斷隊列是否為空
*/
_boolis_empty(queueque){
if(que->front==que->rear&&
que->front->value==-1)
returnTRUE;
returnFALSE;
}
/*
*判斷隊列是否為滿了
*/
_boolis_full(queueque){
if(que->front==que->rear&&
que->front->value!=-1)
returnTRUE;
returnFALSE;
}
/*
*出隊,出隊之後的位置用-1標記
*/
intout_queue(queueque){
intvalue=que->rear->value;
/*
*如果隊列為空則返回-1
*/
/*
if(is_empty(que)){
printf("隊列為空 ");
return-1;
}
*/
que->rear->value=-1;
que->rear=que->rear->next;
returnvalue;
}
/*
*入隊
*/
voidin_queue(queueque,intvalue){
/*
*如果隊列滿則不能入隊
*/
/*
if(is_full(que)){
printf("隊列已滿 ");
return;
}
*/
que->front->value=value;
que->front=que->front->next;
}
/*
*釋放隊列
*/
voidfree_queue(queueque){
q_valuetemp=que->front->next;
while((que->size)--){
free(que->front);
que->front=temp;
temp=temp->next;
}
free(que);
}
/*
*Filename:queue.h
*/
#ifndef_QUEUE_H_
#define_QUEUE_H_
#include<stdio.h>
typedefint_bool;
#defineFALSE(0)
#defineTRUE(1)
typedefstruct_que_value*q_value;
typedefstruct_queue*queue;
struct_que_value{
intvalue;
q_valuenext;
};
struct_queue{
size_tsize;
q_valuefront;
q_valuerear;
};
queuecreate_queue(size_tsize);
voidfree_queue(queueque);
voidset_queue_empty(queueque);
_boolis_empty(queueque);
_boolis_full(queueque);
voidin_queue(queueque,intvalue);
intout_queue(queueque);
#endif
D. 數據結構C語言程序設計編程題,請問這個程序怎麼編
#include<stdio.h>
#include<stdlib.h>
typedef struct List
{
int data;
struct List *next;
}list;
int main()
{
list *L = (list*)calloc(1, sizeof(list)); //頭結點
L->next = NULL;
int n, k, i;
scanf("%d%d", &n, &k);
list *s, *q = L;
for (i=0; i<n; ++i) //賦初值
{
s = (list*)calloc(1, sizeof(list));
s->data = i+1;
s->next = NULL;
q->next = s;
q = s;
}
q->next = L->next; //讓尾結點指向頭結點的下一個,即第一個人的位置,單向循環鏈表創建完成
q = L->next; //讓q指向頭結點的下一個
while (q->next != q) //只剩一個元素時,退出循環
{
for (i=1; i<k-1; ++i)
{q = q->next;} //q指向刪除節點的前一個
s = q->next; //s指向刪除節點
q->next = s->next; //將去除s後的鏈表重新連接起來
q = q->next; //讓q指向下次循環的起始位置
//printf("%d ", s->data);
free(s);
s = NULL;
}
printf ("%d\n", q->data);
free(q);
q = NULL;
free(L);
L = NULL;
return 0;
}
E. 計算機二級C語言程序設計該怎麼做
如下:
現在計算機二級考試程序設計題的環境是vs2010。vs2010是需要創建工程的,一個單獨的文件是沒有辦法運行的,如果你使用的是考試軟體,考試題里應該是有工程的,軟體也應該能幫你自動打開vs2010工程,實在不行就自己創建。
當然,你也可以不使用vs2010,用cfree,devc++這種不需要創建工程的軟體,單獨一個文件是可以運行的。
如何備考
1.選擇題:
如果C語言有一定基礎,考前一周開始刷題沒大問題(因為刷早了會忘)。我發的模擬考試軟體里有,做完題有講解。
另外背一背公共基礎知識和一些程序設計基礎,軟體設計基礎blabla,簡單的一定要拿到!其次是數據結構和資料庫設計基礎,這些如果是零基礎確實比較困難。
從題庫中看敗森鋒,這些題其實也都是大同小異,做多了掌握套路其實還好,比如數據結構中二叉樹,棧,隊列等相關知識。其他搞不懂就千萬別浪費時間,直接跳過,這些題佔比很小,不會影響你過的嘻嘻。
然後就是C語言相關題目,這些題目比答主學校期末試卷廣度小,深度淺,復雜度翻倍,甚至有為了出題而出題嫌疑,但是只要細心,還是沒問題的。但是學過C的同學們,一定要刷刷題!不要以為學過C就好考,其實並不!主要熟悉套路,陷阱一般設在哪兒。
答主考試的時候,最痛苦的是選擇最後幾道C語言相關,真的蠻復雜,最後實在不想看,直接懵選項了。如果是零基礎,可以不用看書,直接上手刷題!
2.程序填空題 、程序修改題:
這個一共36分,極其簡單。尤其是修改題,一定要拿到!很多都是if寫成IF這種「騷操作」。最好的方法就是用我發的模擬考試軟體看改錯題,也就103道左右吧,1分鍾就能看一道,so easy!
填空題隨緣,有難有簡,還是大同小異,掌握套路最重要。方法還是直接刷題,填空題一般都是兩個空都簡單,或是一難一察晌簡。有些題太復雜可以只看簡單的那空,難的隨緣,不差那分!
3.程序設計題:
這個題的給分規則是只看結果!所以不管是算數還是什麼,如果不會編最後就直接把結果搞上去(printf一下)然後讓程序運行下去不要卡住就好了。這道題非常的重要,做好了你就一定能過,甚至是能夠高分通過。但是做不好也問題不大,只要你選擇題能夠對一半,還是有很大機會通過的。
4.全真模擬:
非常重要!考前一定要模擬考試軟體模擬考試一次。記住,選擇題提交之後就不能再修改了,慎重!
模擬完之後,看看有沒有什麼問題。
時間不夠?那就合理分配各題型的時間。
建議:選春手擇題40分鍾,程序設計、修改、設計題合起來60分鍾。一定要留下時間交卷,不要太匆忙。改錯做錯了?那就回去復習下改錯。哪一個題型錯了,就重點復習。
注意事項:
做題過程記得保存,建議做一個小題,保存一次!
每道小題有很多個步驟,中間不要跳步驟,一步一步地做!
注意文檔命名格式,認真審題,根據要求來命名,尤其是不要出現錯字!
注意文件保存位置,不要隨意挪動文件位置,按題目要求來。
考試時一定要帶的物品:
本人證件:准考證、身份證。
其他物品:筆、草稿紙、飲用水、紙巾、等等。
F. C語言編程題怎麼做
#include <stdio.h>
int main()
{
void _m(char *p1, char *p2, int m);
char str1[100], *p1=str1, str2[100], *p2=str2;
int m;
printf("請隨便輸入一個字元串:");
gets(p1);
printf("您輸入的字元串為:\n%s\n\n", p1);
printf("您打算從第幾個字元開始復制呢?\n");
scanf("%d", &m);
_m(p1, p2, m);
printf("\n復製得到的另一個字元串為:\n%s", p2);
return 0;
}
void _m(char *p1, char *p2, int m)
{
int i;
char *temp=p1+m-1;
for(;*temp!='\0';){
*p2++ = *temp++;
}
}
G. C語言結構體編程題,求助大神
#include<stdio.h>
typedef struct __student_info
{
char num[10];
char name[10];
float score;
} student_info;
int main(void)
{
student_info info[5];
printf("請輸入5名學生信息(學號 姓名 成績):
");
for(int i = 0; i < 5; i++)
{
scanf("%s %s %f",info[i].num,info[i].name,&info[i].score);
}
float sum = 0;
for(int i = 0; i < 5; i++)
{
sum += info[i].score;
}
float average = sum/5;
printf("高於平均成績的學生信息如下:
");
for(int i = 0; i < 5; i++)
{
if(info[i].score > average)
{
printf("%s %s %.1f
",info[i].num,info[i].name,info[i].score);
}
}
return 0;
}
H. c語言編程 數據結構題
棧先進後出,隊列先進先出,隊列的順序等價於棧的出棧順序。寫了個簡單的驗證程序,初始的出棧順序必須無誤
#include<iostream>
usingstd::cout;
//iStack元素值有序,簡化了編程,否則就要藉助於下標的有序性
//'g'作為一個額外的標記,取到此值時,表示所有元素都已入棧
chariStack[]={'a','b','c','d','e','f','g'};
charoStack[]={'b','d','f','e','c','a'};
intno=1;
//sp用於指示iStack未入棧的元素
intsp=0;
charTop()
{
returniStack[sp];
}
//ch及之前元素入棧
voidPush(charch)
{
charcc=Top();
while(cc<=ch)
{
printf("(%2d)Push: %c
",no++,cc);
sp++;
cc=Top();
}
}
voidPop(charch)
{
if(ch>=Top()) //當前要出棧的元素未入棧
Push(ch);
printf("(%2d)Pop: %c
",no++,ch);
}
intmain()
{
intcount=0;
intlen=sizeof(oStack);
//1
printf("入棧順序:
");
for(inti=0;i<len;i++)
printf("%c",iStack[i]);
printf("
");
//2
printf("出棧順序:
");
for(inti=0;i<len;i++)
printf("%c",oStack[i]);
printf("
");
//3
printf("出入棧操作:
");
while(count<len)
{
Pop(oStack[count]);
count++;
}
return0;
}