『壹』 考試中:數據結構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]={'