當前位置:首頁 » 編程語言 » 數據結構機試考c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

數據結構機試考c語言

發布時間: 2022-04-14 02:09:44

『壹』 考試中:數據結構c語言版求答案,快快!

void insert(NODE **phead ,int data)
{
NODE *p1=*phead,*p2=NULL,*p;

while(p1 !=NULL)
{
if(data<=p1->x)
{
p=(NODE *)malloc(sizeof(struct node));
p->x=data;
p->next=p1;
if( 1 p2==NULL ) /*若插入的節點將成為頭節點*/
( 2 *phead )=p;//將頭節點指針指向當前節點
else // 如果不是頭節點,直接將p1前的一個節點也就是p2所在的節點和當前插入節點連接
p2->next=p;
break; // 跳出循環,插入已經完成,函數會馬上返回。
}

// 可能要添加以下兩行代碼才會工作正常
p2 = p1;
p1 = p2->next;
}

if(p1==NULL) // 如果沒有頭節點直接添加
{
p=(NODE*),alloc(sizeof(struct node));
p->x=data;
p->next=( 3 NUll ); // 設置頭節點的後向指針
if( 4 p2==NUll )/* 若插入的節點將成為頭節點*/
( 5 *phead )=p;
else // 以下代碼根本就是多餘的
p2->next=p;
}
}

『貳』 數據結構 C語言

你這題目要求不明確。

我盡量把所有可能功能寫進去。

1、輸入分自動輸入和手動輸入兩種模式,都是生成單鏈表。手動有輸入驗證

2、輸入大寫字母按順序添加到鏈表,我寫了2中排列(1、按ascii碼排列。2、按字母順序排列)

#include<stdio.h>
#include<malloc.h>
typedefstructabc
{
charc;
structabc*next;
}ABC;
voidMeError(ABC*lets);//內存申請異常
ABC*add2Lits(ABC*abcHead,ABC*abcTail,charc);//向鏈表添加字母
ABC*deleteByInx(ABC*abcHead,ABC*abcTail,intinx);//刪除指定位置,返回尾節點,參數inx:第幾個節點
ABC*insert2List(ABC*abcHead,ABC*abcTail,charc,intx);//向鏈表順序位置插入大寫字母(x=1按照ASCII碼順序插入,x=0按照字母順序插入)
ABC*inputLet(ABC*abcHead,ABC*abcTail,intflag);//順序輸入26個小寫字母
voidprintfList();//列印鏈表
intmaxlen=26;//鏈表總長度
intmain()
{
inti;
charc;
ABC*abcHead=NULL,*abcTail=NULL;
abcHead=(ABC*)malloc(sizeof(ABC));
MeError(abcHead);
abcHead->next=NULL;
printf("1、自動錄入小寫字母輸入0,手動錄入輸入1:");
scanf("%d",&i);
abcTail=inputLet(abcHead,abcTail,i);
printfList(abcHead);

printf(" 2、請輸入要刪除第幾個字母:");
scanf("%d",&i);
abcTail=deleteByInx(abcHead,abcTail,i);
printfList(abcHead);

printf(" 3、請輸入要插入的大寫字母:");
getchar();
scanf("%c",&c);
getchar();
printf("--按ASCII碼順序插入輸入1,按照字母順序插入輸入0:");
scanf("%d",&i);
abcTail=insert2List(abcHead,abcTail,c,i);
printfList(abcHead);
return0;
}
voidprintfList(ABC*abcHead)//列印鏈表
{
printf("列印鏈表內容: ");
while(abcHead->next!=NULL)
{
printf("%c",abcHead->next->c);
abcHead=abcHead->next;
}
printf(" ");
}
ABC*inputLet(ABC*abcHead,ABC*abcTail,intflag)//順序輸入26個小寫字母,參數flag>0:手動輸入,flag=0自動輸入
{
inti=maxlen;
charlc=0,c;
if(!flag)
{
printf("--按照順序自動輸入26個小寫字母...... ");
c='a';
while(i--)
abcTail=add2Lits(abcHead,abcTail,c++);
returnabcTail;
}
printf("--按照順序輸入26個小寫字母...... ");
getchar();
while(i--)
{
printf("輸入第%d個字母:",26-i);
scanf("%c",&c);
getchar();
if((lc==0&&c!='a')||(lc!=0&&c-lc!=1))
{
printf("錯誤!請按照小寫字母順序重新");
i++;
continue;
}
else
{
lc=c;
abcTail=add2Lits(abcHead,abcTail,c);
}
}
returnabcTail;
}
voidMeError(ABC*lets)//內存申請異常
{
if(!lets)
{
printf("內存申請失敗! ");
exit(0);
}
}
ABC*add2Lits(ABC*abcHead,ABC*abcTail,charc)//向鏈表添加字元,返回尾節點
{
ABC*abcNew=(ABC*)malloc(sizeof(ABC));
MeError(abcNew);
abcNew->c=c;
abcNew->next=NULL;
if(abcHead->next==NULL)
abcHead->next=abcNew;
else
abcTail->next=abcNew;
abcTail=abcNew;
returnabcTail;
}
ABC*deleteByInx(ABC*abcHead,ABC*abcTail,intinx)//刪除指定位置,返回尾節點,參數inx:第幾個節點
{
inti=0,flag=0;
ABC*abcNext=NULL;//要刪除的節點的後一個節點
while(abcHead->next!=NULL)
{
i++;
abcNext=abcHead->next->next;
if(i==inx)
{
if(abcHead->next==abcTail)
abcTail=abcHead;
free(abcHead->next);
abcHead->next=abcNext;
flag=1;
maxlen--;
break;
}
abcHead=abcHead->next;
}
if(flag==0)
printf("未找到指定的字母 ");
returnabcTail;
}
ABC*insert2List(ABC*abcHead,ABC*abcTail,charc,intx)//向鏈表順序位置插入大寫字母(x=1按照ASCII碼順序插入,x=0按照字母順序插入)
{
ABC*abcNext=NULL,*abcNew=NULL;
abcNew=(ABC*)malloc(sizeof(ABC));
abcNew->c=c;
abcNew->next=NULL;
while(abcHead->next!=NULL)
{
abcNext=abcHead->next->next;
if((x==1&&(abcNext==NULL||c<=abcHead->next->c))||(x==0&&(abcNext==NULL||c+32<=abcHead->next->c)))
{
abcNew->next=abcHead->next;
abcHead->next=abcNew;
break;
}
abcHead=abcHead->next;
}
returnabcTail;
}

『叄』 數據結構考研是考C語言的還是c++的

C語言,主要是 考思路,不是考察代碼。

『肆』 大學的數據結構(c語言),實際上還是考c語言嗎

基本的演算法,考的最多的就是排序了,什麼冒泡,插入,快速,二分等等。線性表主要考單向鏈表便利,建立,增刪改,鏈表逆向等操作。二叉樹么,就是個建立。遞歸遍歷操作。圖實際上考的不多,說白了還是演算法問題,這些東西你得明白思想,知道怎麼做,然後才是考你C語言基礎語法,數組,結構體,指針功底。

『伍』 求c語言數據結構上機題代碼(用數組來做)

#include <stdio.h>

#include"string.h"

#include <stdlib.h>

#define N 100000

#define M 10000

int fun(char a[])

{

int sum=0;

for(int i=0;i<strlen(a);i++)

sum+=a[i];//字元數字化→ACSII碼之和是單詞標志之一;

return sum;

}

int main() {

/*_________________________________________________*/

FILE *fp;

char b[N + 1];

//判斷文件是否打開

if ( (fp = fopen("D:\英語論文.txt", "rt")) == NULL )/*這里D:\ 英語論文.txt 是路徑;讀取D盤下,名為(英語論文)的文本文件*/

{

puts("文件讀取失敗! ");

exit(0);

}

else

{

puts("文件讀取成功");

puts("開始計算");

}

//循環讀取文件的每一行數據

while( fgets(b, N, fp) != NULL )

{

/*__________________________________________*/

int d[M]={0},x=0;

char a[111][11]={''};

char t[11]={''};

int k=0,j=0;

for(int i=0;i<strlen(b);i++)

{

if((b[i]>='a'&&b[i]<='z')||(b[i]>='A'&&b[i]<='Z'))//不是空格就儲存在二維數組中,一行一個單詞;

a[k][j++]=b[i];

if(b[i]==' ')//遇到下一個空格就換行,進而開始下一個單詞的儲存;

{

k++;

j=0;

}

}

int max=fun(a[0]);

for(int i=0;i<=k;i++)

{

d[fun(a[i])]++;//用每個單詞的ASCII碼之和桶排序,這也即是字典序;

if(fun(a[i])>max)

max=fun(a[i]);//找出最大的作為上限;

}

int name;

for(int i=0;i<=max;i++)

{

name=0;

for(int j=0;j<=k;j++)

{

if(fun(a[j])==i)/*a[j]的ASCII碼之和等於i,說明d[i]是記錄單詞a[j]的,d[i]的數就是a[j]出現的頻率;*/

{

name=j;//記錄單詞下標;

}

}

if(d[i]!=0)//d[i]!=0即i是某個單詞的ASCII碼之和;

{

printf("%s %d ",a[name],d[i]);//輸出

}

}

/*___________________________________________*/

}

//結束關閉文件

fclose(fp);

return 0;

}

這是修改過的,不過沒太大變化,只是加了一個文件讀取代碼;

『陸』 數據結構考試的話代碼到底寫可以運行的C還是書上的那種類C語言呢

很明確,數據結構的考試,它會把大框架已經寫好了,像main()和一些定義及常規的東西都寫好了。

你只需要在它給你留的空里寫上關鍵代碼,然後還要你能夠編譯運行出結果。

你可以看一下歷屆真題

『柒』 數據結構的習題(C語言版)

第一個問題,分析下要求,可以知道要做的事情是合並兩個數組到一個數組里去,數組C的長度是AB之和。表C的第一個字元不是A的第一個字元就是B的第一個字元。因此接下來要做的事情就是做一個長度為AB之和的循環,每一次找出A或B中的最小元素,存到C裡面去,循環結束,C就自動有了。

第二個問題,有時間和空間的要求,不太容易,只有更好,沒有最好。不過提供一個思路。可以首先掃描整個數列,將奇數偶數的位置和個數標注出來,存在一個數列中。例如數列奇 奇 偶 奇 奇,可以得到奇數個數為4,位置為[0,1,3,4],偶數為1,位置為[2],因此要生成的數列中前4個必定為奇數,而題目中沒有對大小的要求,因此只用將偶數與最後面的奇數對換位置即可。對換的次數即為偶數的個數。

大概思路如此,不過有很多方法可以高效的存儲和計算,具體實現,希望你能親自琢磨下,還可以鞏固一下C技巧。
祝好,有問題可以探討。

『捌』 C語言數據結構上機題

#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct LNode
{
char data;
struct LNode * next;
}LNode,* LinkList;
void CreateList(LinkList &L)//創建鏈表存放26個字母組成的線性表
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
char c='z';
for(int i=26;i>0;i--)
{
LNode *p;
p=(LinkList)malloc(sizeof(LNode));
p->data=c--;
p->next=L->next;
L->next=p;
}
}
bool ListInsert(LinkList &L,int i,char c)//在第i個位置插入字母c
{
LNode * p=L;int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return false;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=c;
s->next=p->next;
p->next=s;
return true;
}
void main()
{
LinkList L;
CreateList(L);//1.創建鏈表存放26個字母組成的線性表
char c;int i;
cout<<"輸入插入的字母"<<endl;
cin>>c;
cout<<"輸入插入的位置(整數)"<<endl;
cin>>i;
if(ListInsert(L,i,c))//在第i個位置插入字母c
{
while(L->next!=NULL)//將插入後的線性表輸出
{
cout<<L->next->data;
L=L->next;
}
}
}

//辛苦寫完...剛調試通過...加分啊..
調試是在C++環境下調試的,如果你要在C環境下..把
cout<<L->next->data; 改為:
printf("%d",L->next->data);
cin>>c;改為:scanf("%c",c);
就ok了......

ps: o_o一般上機都是C++吧......

『玖』 C語言數據結構考試

這幾個題目都是數據結構裡面的。
其實如果你懂順序表,鏈表,後面的都比較簡單的。都是在這個基礎上。
(゚⊿゚)ツ復習下樹,圖,一些演算法,鏈表,棧這種估計考得不多。主要是樹,圖,順序表鏈表,一些演算法。樹考二叉樹多一些。